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中加入复选的难点的俩个例子,方便大家更好的学习.
一个JTable里添加CheckBox的完整例子,包括表头的JCheckBox全选联动
swing jtable列表的每列添加复选框
JTable增加删除按钮实例,用于java开发
带CheckBox的JTable源代码
JTable使用 JTable使用JTable使用JTable使用
jTableCheckbox 用于表行的jQuery插件充当复选框。 它是什么? jTableCheckbox将每个表行变成一个大复选框。... jTableCheckbox使用复选框中的data-jtable属性进行表单提交。 < table> < tbody> < td
JTable 在一个单元格放入多个按钮,
JTable的显示效果
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
实现了超链接功能的JTable,双击后ie打开超链接,超链接文字为蓝色,同时屏蔽了单元格的双击编辑功能,很实用.
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据
Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性
swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...
ResultSet直接在JTable显示
mvc下使用jtable插件
Excel导入JTable JTable导出Excel JTable删除行 JTable显示实体数据 JTable的Vector添加实体,支持直接增加实体至JTable中,删除行时允许多种可能性(单选 连续多选 任意多选)。
java JTree+JTable使用样例,实现将JTree的节点内容显示到JTable中,eclipse导入maven项目 maven编译: mvn clean package