- 浏览: 733081 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lingsuch:
Android网络连接判断与处理 -
月光照着我:
写的不错,作为笔记了
Android中LayoutInflater的使用 -
智博王锋:
好文章是要顶的!
Android中LayoutInflater的使用 -
云南白药:
...
Android中LayoutInflater的使用 -
万新one:
理解了许多。解释的不错。3Q.
Android中LayoutInflater的使用
JTable实现的TableHeader应该算是ColumnHeader,显示的是列标题。这里说的RowHeader指的是行标题,也就是行号。JTable已经默认实现了ColumnHeader,但却没有实现RowHeader。那么如何实现RowHeader?这就要通过JScrollPane,实际上JTable的ColumnHeader也是这么实现的。先来看看JScrollPane的结构:
可知,JScrollPane具有column header和row header区域,可以通过setColumnHeaderView(Component view) 和setRowHeaderView(Component view)分别为它们添加相应的外观组件。参数是Component,所以任何Swing组件都可以添加。在将JTable加入JScrollPane中时,Swing已经默认将JTable的标题设置为JScrollPane的column header。我们只要采取相同的的方法就可以为JTable生成RowHeader。要想为JTable显示行号,就要有与JTable一样的属性特质,那么什么组件适合呢?自然还是JTable了,我们只要在JScrollPane的row header区域添加一个只有一列的JTable,并保证它与中间显示的JTable同步具有相同列数就行了。当然还要实现,当选择某行时,该行号突出显示等等功能。这就要自己实现TableCellRenderer,并且还要让它实现ListSelectionListener以相应JTable的选择某行的事件。
我已经将RowHeader封装成一个组件RowHeaderTable,构造方法是,
public RowHeaderTable(JTable refTable,int columnWidth)
refTable是需要加RowHeader的表,columnWidth是RowHeader显示的宽度。只要将RowHeaderTable加入JScrollPane的row header区域即可为JTable生成行标题。不多说,贴代码:
效果图
import javax.swing.*; import java.awt.*; import javax.swing.table.*; import javax.swing.event.*; import java.awt.event.*; class TableRowHeaderTest { public static void main(String[] args) { new TableRowHeaderFrame(); } } class TableRowHeaderFrame extends JFrame { public TableRowHeaderFrame(){ DefaultTableModel model = new DefaultTableModel(50,10); JTable table = new JTable(model); /*将table加入JScrollPane*/ JScrollPane scrollPane = new JScrollPane(table); /*将rowHeaderTable作为row header加入JScrollPane的RowHeaderView区域*/ scrollPane.setRowHeaderView(new RowHeaderTable(table,40)); this.getContentPane().add(scrollPane,BorderLayout.CENTER); this.setVisible(true); this.setSize(400,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } /** * 用于显示RowHeader的JTable,只需要将其加入JScrollPane的RowHeaderView即可为JTable生成行标题 */ class RowHeaderTable extends JTable { private JTable refTable;//需要添加rowHeader的JTable /** * 为JTable添加RowHeader, * @param refTable 需要添加rowHeader的JTable * @param columnWideth rowHeader的宽度 */ public RowHeaderTable(JTable refTable,int columnWidth){ super(new RowHeaderTableModel(refTable.getRowCount())); this.refTable=refTable; this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//不可以调整列宽 this.getColumnModel().getColumn(0).setPreferredWidth(columnWidth); this.setDefaultRenderer(Object.class,new RowHeaderRenderer(refTable,this));//设置渲染器 this.setPreferredScrollableViewportSize (new Dimension(columnWidth,0)); } } /** * 用于显示RowHeader的JTable的渲染器,可以实现动态增加,删除行,在Table中增加、删除行时RowHeader * 一起变化。当选择某行时,该行颜色会发生变化 */ class RowHeaderRenderer extends JLabel implements TableCellRenderer,ListSelectionListener { JTable reftable;//需要添加rowHeader的JTable JTable tableShow;//用于显示rowHeader的JTable public RowHeaderRenderer(JTable reftable,JTable tableShow) { this.reftable = reftable; this.tableShow=tableShow; //增加监听器,实现当在reftable中选择行时,RowHeader会发生颜色变化 ListSelectionModel listModel=reftable.getSelectionModel(); listModel.addListSelectionListener(this); } public Component getTableCellRendererComponent(JTable table,Object obj, boolean isSelected,boolean hasFocus,int row, int col) { ((RowHeaderTableModel)table.getModel()).setRowCount(reftable.getRowCount()); JTableHeader header = reftable.getTableHeader(); this.setOpaque(true); setBorder(UIManager.getBorder("TableHeader.cellBorder"));//设置为TableHeader的边框类型 setHorizontalAlignment(CENTER);//让text居中显示 setBackground(header.getBackground());//设置背景色为TableHeader的背景色 if ( isSelect(row) ) //当选取单元格时,在row header上设置成选取颜色 { setForeground(Color.white); setBackground(Color.lightGray); } else { setForeground(header.getForeground()); } setFont(header.getFont()); setText(String.valueOf(row+1)); return this; } public void valueChanged(ListSelectionEvent e){ this.tableShow.repaint(); } private boolean isSelect(int row) { int[] sel = reftable.getSelectedRows(); for ( int i=0; i<sel.length; i++ ) if (sel[i] == row ) return true; return false; } } /** * 用于显示表头RowHeader的JTable的TableModel,不实际存储数据 */ class RowHeaderTableModel extends AbstractTableModel { private int rowCount;//当前JTable的行数,与需要加RowHeader的TableModel同步 public RowHeaderTableModel(int rowCount){ this.rowCount=rowCount; } public void setRowCount(int rowCount){ this.rowCount=rowCount; } public int getRowCount(){ return rowCount; } public int getColumnCount(){ return 1; } public Object getValueAt(int row, int column){ return row; } }
发表评论
-
Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
2012-09-21 09:22 1631【摘要】 本文诣在 ... -
JavaSwing实现支持合并拆分的JTable
2010-12-16 15:39 1981GridBagModel:抽象模型接口。该接口用于描述表格中单 ... -
JTable小例子,表格中使用JComboBox下拉按钮
2010-12-16 15:21 5429import java.awt.BorderLayout; ... -
配合滚动面板实现JTable上下翻页的效果
2010-12-16 14:26 3427import java.awt.BorderLayout; ... -
JScrollBar简单演示例子
2010-12-06 19:28 6628import java.awt.*; import java ... -
点击jtable的表头,数据会根据根据表头来排序
2010-12-06 11:47 5143import javax.swing.JFrame; imp ... -
重写JSplitPane的BasicSplitPaneUI
2010-09-18 13:39 1582import java.awt.Color; import ... -
Swing窗口初始最大化的方法
2010-08-20 11:09 79131.设置窗口最大(伪最大化) JFrame frame =n ... -
Tree目录实现拖拽功能演示实例(DragAndDrop)
2010-08-10 16:49 1803import java.awt.BorderLayout; ... -
设置JTextPane指定内容的颜色
2010-05-21 14:29 1373package Assis; import java.a ... -
ScaleImageDemo图像缩小与放大演示
2010-05-12 14:59 2126package Assis; import java.a ... -
TreesDemo
2010-05-04 11:19 1095import java.awt.*; import java ... -
TableDemo
2010-05-04 11:17 1207import javax.swing.JTable; imp ... -
分割面板演示JSplitPaneDemo
2010-05-04 11:12 1400//Java Swing 带分隔条的面板代码 impor ... -
StylesExample8
2010-04-08 12:55 1213import javax.swing.*; import j ... -
StylesExample7
2010-04-08 12:54 1009import javax.swing.*; import j ... -
StylesExample6
2010-04-08 12:52 1073import javax.swing.*; import j ... -
StylesExample5
2010-04-08 12:51 1003import javax.swing.*; import j ... -
StylesExample4
2010-04-08 12:50 1121import javax.swing.*; import j ... -
StylesExample3
2010-04-08 12:50 1014import javax.swing.*; import j ...
相关推荐
综上所述,"JTable数据导出到Excel.rar"的资源为开发者提供了一种实现方式,将Java Swing应用中的`JTable`数据导出到Excel,方便数据处理和分享。通过理解和应用这些知识点,我们可以创建更加功能丰富的Java桌面应用...
自己写的一个继承自JTable的带有行号显示功能的表格,支持增删,设置行高等动态操作。
JTable 的展示方式可以通过设置表格的宽度和高度、显示表头、添加列、设置列的编辑器等方式进行美化。例如,可以设置表格的宽度和高度,以适应不同的屏幕分辨率。 JTable 事件响应 JTable 支持事件响应,可以监听...
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
同时,我们还需要为表头添加一个可选的`JCheckBox`,这可以通过自定义`TableCellRenderer`实现。`CheckHeaderCellRenderer.java`应该包含了这个自定义渲染器的实现。 ```java public class TestFrame extends ...
主要代码: DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setColumnIdentifiers(new String[] {"标题一", "标题二", "标题三"});
在Java Swing库中,JTable是一个非常重要的组件,它用于展示二维数据,通常与数据库、数组或Vector等数据源关联。这个"一个jTable的示例文件.rar"应该包含了一个演示如何使用JTable的Java程序。尽管标签是"C#",但...
`JTable` 提供了丰富的功能,如数据编辑、排序、筛选等。在这个特定的场景中,"Jtable动态添加删除搜索"指的是在`JTable`上实现动态的数据增删查改功能。 1. **动态添加**:在`JTable`中动态添加数据通常涉及以下...
`JFrame`的`contentPane`添加了`JScrollPane`,并设置布局管理器为`BorderLayout.CENTER`,使得表格居中显示。最后,`JFrame`设置了标题、调整大小并显示出来。 表格由两部分构成:行标题(Column Header)和行对象...
尽管标签指定为"C#",但这里我们将主要讨论与`JTable`相关的Java知识点,因为标题和描述并未明确指出是在C#中实现。 1. **JTable的基本结构**: `JTable`是`javax.swing.JTable`类的实例,它由`TableModel`(数据...
DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.addRow(new Object[]{myBean.getValue1(), myBean.getValue2(), myBean.getValue3()}); ``` 5. **数据持久化:Sql Server数据库**: ...
JTable 是java窗体应用,关于布局,JTable的方法和一些其他的运用
1. **关闭自动调整宽度**:`table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)`,防止列宽随窗口大小改变而自动调整。 2. **设置列宽限制**:通过`TableColumn`对象的`setPreferredWidth`, `setMaxWidth`和`...
1. 设置列不可随容器组件大小变化自动调整宽度:`table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);` 这种方式可以禁止表格列的自动调整宽度。 2. 限制某列的宽度:`TableColumn firsetColumn = table....
JTable中加入复选框的两种方法 在Java中,JTable是一个常用的表格控件,用于显示和编辑表格...通过使用CheckBoxRenderer类和CheckButtonEditor类,我们可以轻松地将复选框添加到JTable中,并实现复杂的表格编辑功能。
- **代码示例**:`table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);` - **解释**:这将禁止列宽随着容器大小的变化而自动调整。 2. **固定某列的宽度**: - **代码示例**: ```java TableColumn firstColumn...
将`JButton`添加到`JTable`中可以为用户提供更丰富的交互体验,例如编辑、删除或自定义操作。本文将详细讲解如何在`JTable`中添加`JButton`控件,并探讨其可能的拓展应用。 首先,我们需要理解`JTable`的基本结构。...
在Java的Swing库中,JTable是一种非常重要的组件,用于展示二维数据表格。而将多个Button放入JTable的同一单元格中,可以提供更丰富的交互性,这在某些复杂的应用场景下是必要的。本教程将详细介绍如何在JTable中...
基于java的学籍管理系统.实现了JTable控件的封装.-.rar基于java的学籍管理系统.实现了JTable控件的封装.-.rar基于java的学籍管理系统.实现了JTable控件的封装.-.rar
cell.setCellValue(jTable.getColumnModel().getColumn(i).getHeaderValue().toString()); } // 将JTable的数据写入Excel的剩余行 for (int i = 0; i ; i++) { Row dataRow = sheet.createRow(i + 1); for ...