import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;
/**
*
* ----------------------------------------Table Demo4 --------------------------------
* =====================================================快乐小神仙
*
*
*
* 一、Vector与ArrayList讲解
* 用到了向量Vector 可以参照ArrayList的用法 ,他们用法基本一样。
* 区别: Vector是线性安全的,还有连个空间的增长长度方式不一样。
* Vecrot是每次增加原来的一倍,ArrayList是每次增加原来的一半。
*
*
*二、本例: Table demo的例子:-------在表格中添加 单选按钮,和复选框
*
* 讲解:
*
* 1、用JFrame,JPanel,JButton 写一个简单的界面
*
* 2、 写一个内部类,让此类继承AbstractTableModel
*
* 3、定义一个内部类的全局变量Vector vector;
*
* 4、写一个构造方法 :初始化Vector
*
* 5、定义一个内部类的全局变量,String[] columnNames = {}; 这是表格的列名
*
* 6、实现方法getColumnCount(): columnNames.length;
*
* 7、实现方法getRowCount(): vector.size;
*
* 8、实现getValueAt(): vector.get(row).get(col);
*
* 9、写一个往Vector中添加数据的方法 addRow(),这个方法是子类所特有的,其中方法名可以任意
*
* 10、在外部类定义全局变量 private TableModel model和表格 private JTable table;
*
* 11、在外部类中的构造方法初始化model 和table ,其中 初始化table是这样初始化的:table = new JTable(model);
*
* 12、在构造方法定义一个滚动面板,将表格添加到面板中,要不然表格的表头是不会显示的:
* JScrollPane pane =new JScrollPane(table);
*
* 13、然后将pane添加到JPanel中。
*
* 14、运行程序...
*
* 15、你会看见表头并不是你所想看到的样子,这是由于model是调用了父类AbstractTableModel中的方法getColumnName(),
* 所以要修改表头的话,只能重写父类中的非抽象方法getColumnName(),覆盖父类中的方法
*
* 16、 实现添加按钮的方法,再次我直接用匿名类实现
*
* 17、运行程序,你会发觉“是否可用”的显示方法并不是你所想要的。
*
* 18、要实现“是否可用”用复选框的形式进行显示,那么就需要重写父类中的getClass()方法
*
* 19、运行程序,你会发觉复选框修改不了,所以还需要修改两个方法
*
* 20、重写父类的方法 isCellEditAble()------让某些值可以进行修改
* setValueAt()-------是修改后的值生效。
*
* Table demo------------在表格中添加其他组件
* @author Administrator
*
*/
public class TableDemo4 {
private JFrame frame;
private JPanel panel;
private JButton addButton;
private JTable table;
private TableModel model;
public TableDemo4(){
frame = new JFrame("表格测试");
panel = new JPanel();
addButton = new JButton("添加");
/*
* 给按钮添加监听器
*/
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object[] data = {"张三","zhangsan",true};
model.addRow(data);
//强制刷新界面
table.updateUI();
}
});
model = new TableModel();
table = new JTable(model);
/*model = new TableModel();
table = new JTable(model);
String[]d = {"张三","李四","王五"};
JComboBox com = new JComboBox(d);
TableColumnModel tcm = table.getColumnModel();//得到TableModel()
tcm.getColumn(0).setCellEditor(new DefaultCellEditor(com));
tcm.getColumn(0).setPreferredWidth(50);
tcm.getColumn(1).setPreferredWidth(100);
tcm.getColumn(2).setPreferredWidth(50);*/
JScrollPane pane = new JScrollPane(table);
panel.add(addButton);
panel.add(pane);
frame.add(panel);
frame.setVisible(true);
frame.setBounds(400,200,500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//model.addRow("1","zhangsan", true, "19");
//table.updateUI();
}
/**
*
* AbstractTableModel:中的抽象方法:
* getColumnCount(),getRowCount(),getValueAt():
* 当JTable调用方法updateUI()的时候,就会执行这些方法。
*
*
* updateUI()会把父类中的方法全部执行一遍
* @author Administrator
*
*/
public class TableModel extends AbstractTableModel{
private Vector vector = new Vector();
private String[] columnNames = {"用户名","密码","是否可用"};
/**
* ------------------------------------------------------
* 重写父类中的抽象方法
*
* 获得表格中的列数
*/
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
System.out.println("getColumnCount()");
return columnNames.length;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
System.out.println("getRowCount()");
return vector.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
//vector.get(rowIndex);得到的是Object的对象
System.out.println("getValueAt()");
return ((Vector)vector.get(rowIndex)).get(columnIndex);
}
/**
* 抽象方法
* -----------------------------------------------------------
*/
/**
* 重写父类中非抽象的方法------覆盖父类中的方法
*/
public String getColumnName(int columnIndex) {
System.out.println("getColumnName");
return columnNames[columnIndex];
}
/**
* 重写父类中的方法=======获得输入数据的类型,实现复选框的显示
*/
public Class getColumnClass(int columnIndex){
return getValueAt(0,columnIndex).getClass();
}
/**
* 让表格中某些值可以进行修改
* return false,说明不能进行修改
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
/**
* 重写父类中的方法=====实现表格的数据可操作
*/
public void setValueAt(Object value, int rowIndex, int columnIndex) {
//先删除,在添加
System.out.println("setValueAt()");
((Vector) vector.get(rowIndex)).remove(columnIndex);
((Vector) vector.get(rowIndex)).add(columnIndex,value);
this.fireTableCellUpdated(rowIndex, columnIndex);
}
/**
* 无参构造方法------初始化数据
*/
public TableModel(){
}
/**
* 往行中添加数据----这个方法名可以随意,由用户进行自行调用,
* 否则table.updateUI()是不会自动调用的
*/
public void addRow(Object[] data){
int size = data.length;
Vector v = new Vector();
for(int i=0; i<size; i++){
v.add(data[i]);
}
vector.add(v);
}
}
/**
* 程序的入口
*/
public static void main(String[] args){
new TableDemo4();
}
}
相关推荐
JTable中加入复选框的两种方法 在Java中,JTable是一个常用的表格控件,用于显示和编辑表格数据。然而,在JTable中加入复选框是一个常见的需求,但是却不是那么容易实现。本文将介绍JTable中加入复选框的两种方法,...
在某些场景下,我们可能需要在`JTable`的每一行中添加复选框,以便用户可以选择或取消选择特定行。这通常用于实现多选功能,例如在数据操作、筛选或者设置偏好时。以下将详细介绍如何在`JTable`中添加复选框以及相关...
通过上述代码,我们可以创建一个包含`CheckBox`的`JTable`,并且表头的`JCheckBox`可以实现全选/全不选的功能。这种功能在很多数据操作应用中都非常实用,例如在邮件客户端、任务管理器或者文件管理器中选择多项进行...
本示例中的“带CheckBox的JTable源代码”显然涉及如何在`JTable`的列中嵌入复选框,让用户能够通过勾选来选择或编辑数据。 首先,要创建带有复选框的`JTable`,你需要创建一个自定义的`TableCellRenderer`类。这个...
JTable增加删除按钮实例,用于java开发
在实际应用中,我们有时需要在JTable的列中添加复选框(CheckBox)来实现多选功能。本篇将介绍一个Swing JTable组件的CheckBox管理类,名为`TableCheckboxManager`,它能够帮助开发者更方便地管理和操作这些复选框。...
JTable使用 JTable使用JTable使用JTable使用
jTableCheckbox 用于表行的jQuery插件充当复选框。 它是什么? jTableCheckbox将每个表行变成一个大复选框。... jTableCheckbox使用复选框中的data-jtable属性进行表单提交。 < table> < tbody> < td
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`...
JTable的显示效果
例如,我们可以创建一个CustomTreeCellRenderer类,重写其getTreeCellRendererComponent方法,使得每个树节点都显示为一个带复选框的组件。同时,我们需要监听JTree的SelectionValueChanged事件,当用户更改选择时,...
JTable 动态刷新数据 JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 ...
### Java中的JTable用法详解 #### 一、概述 JTable是Swing框架中用于显示和编辑表格数据的关键组件之一。它不仅提供了强大的数据管理功能,还支持丰富的定制选项,使得开发者能够根据具体需求创建出高度个性化的...
这个文件可能涉及到了`JTable`中的复选框列,即在表格的一列中展示`JRadioButton`。这通常是通过自定义`TableCellRenderer`和`TableCellEditor`来实现的。`TableCellRenderer`负责渲染单元格的外观,而`...
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示表格数据。它是`javax.swing.JTable`类的实例,提供了一个可交互的二维数据视图,允许用户浏览、编辑和操作表格中的数据。这个"JTable ...
实现了超链接功能的JTable,双击后ie打开超链接,超链接文字为蓝色,同时屏蔽了单元格的双击编辑功能,很实用.
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
`JTable`默认提供了一些基本的单元格编辑器和渲染器,如文本、复选框等。但为了实现更复杂的需求,如日期选择、颜色选择等,你需要自定义`TableCellEditor`和`TableCellRenderer`。 6. **排序和过滤**: `JTable`...