这是一个值得看的原创案例,希望大家更加完善这段代码的功能import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import javax.swing.JTextField;
import java.awt.Container;
import javax.swing.table.AbstractTableModel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.DefaultCellEditor;
import javax.swing.table.TableColumn;
public class AbstractTableModelTest extends JFrame{
private JTable table=null;
private JScrollPane jsp=null;
private JComboBox cob=null;
private JCheckBox ckb=null;
private JTextField txt=null;
public AbstractTableModelTest(){
this.setTitle("JTable的ListSelectionModeld的监听事件");
this.setSize(400,360); //获取窗体的内容面板
Container container=this.getContentPane();
MyAbstractTableModel myModel=new MyAbstractTableModel(); //JTable
table=new JTable(myModel);
//获得表格的表格列类
TableColumn tc1=table.getColumnModel().getColumn(2);
TableColumn tc2=table.getColumnModel().getColumn(4);
TableColumn tc3=table.getColumnModel().getColumn(5); //实例化JCheckBox
ckb=new JCheckBox();
tc1.setCellEditor(new DefaultCellEditor(ckb)); //实例化JComboBox
cob=new JComboBox();
cob.addItem("HN");
cob.addItem("HB");
cob.addItem("BJ");
tc2.setCellEditor(new DefaultCellEditor(cob)); //实例化JTextField
txt=new JTextField("");
txt.setSize(100,26);
tc3.setCellEditor(new DefaultCellEditor(txt)); //JScrollPane
jsp=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
container.add(jsp); //获得自定义的抽象表格模型 this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); } public static void main(String[] args){
new AbstractTableModelTest();
}
}class MyAbstractTableModel extends AbstractTableModel{
//定义表头数据
String[] head={"ID","NAME","SEX(boy)","AGE","ADDRESS","DEMO"};
//创建类型数组
// Class[] typeArray={Object.class,Object.class,Boolean.class,int.class,Object.class,Object.class}; //定义表的内容数据
Object[] data1={"200913420125","SUMMER",new Boolean(true),new Integer(20),"1","NULL"};
Object[] data2={"200913420124","WULEI",new Boolean(true),new Integer(20),"2","NULL"};
Object[] data3={"200913420125","BOOK",new Boolean(false),new Integer(20),"3","NULL"};
Object[] data4={"200913420125","CUP",new Boolean(true),new Integer(20),"4","NULL"};
Object[] data5={"200913420125","MOUSE",new Boolean(true),new Integer(20),"5","NULL"};
//定义表格每一列的数据类型 Class[] typeArray={Object.class,Object.class,Boolean.class,Integer.class,JComboBox.class,Object.class}; Object[][] data={data1,data2,data3,data4,data5}; //获得表格的列数
public int getColumnCount(){
return head.length;
}
//获得表格的行数
public int getRowCount(){
return data.length;
}
//获得表格的列名称
@Override
public String getColumnName(int column){
return head[column];
}
//获得表格的单元格的数据
public Object getValueAt(int rowIndex,int columnIndex){
return data[rowIndex][columnIndex];
}
//使表格具有可编辑性
@Override
public boolean isCellEditable(int rowIndex,int columnIndex){
return true;
}
//替换单元格的值
@Override
public void setValueAt(Object aValue,int rowIndex,int columnIndex){
data[rowIndex][columnIndex]=aValue;
fireTableCellUpdated(rowIndex,columnIndex);
} //实现了如果是boolean自动转成JCheckbox
/*需要自己的celleditor这么麻烦吧。jtable自动支持Jcheckbox,
*只要覆盖tablemodel的getColumnClass返回一个boolean的class,
*jtable会自动画一个Jcheckbox给你,
*你的value是true还是false直接读table里那个cell的值就可以
*/
public Class getColumnClass(int columnIndex){
return typeArray[columnIndex];//返回每一列的数据类型
}
}
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import javax.swing.JTextField;
import java.awt.Container;
import javax.swing.table.AbstractTableModel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.DefaultCellEditor;
import javax.swing.table.TableColumn;
public class AbstractTableModelTest extends JFrame{
private JTable table=null;
private JScrollPane jsp=null;
private JComboBox cob=null;
private JCheckBox ckb=null;
private JTextField txt=null;
public AbstractTableModelTest(){
this.setTitle("JTable的ListSelectionModeld的监听事件");
this.setSize(400,360); //获取窗体的内容面板
Container container=this.getContentPane();
MyAbstractTableModel myModel=new MyAbstractTableModel(); //JTable
table=new JTable(myModel);
//获得表格的表格列类
TableColumn tc1=table.getColumnModel().getColumn(2);
TableColumn tc2=table.getColumnModel().getColumn(4);
TableColumn tc3=table.getColumnModel().getColumn(5); //实例化JCheckBox
ckb=new JCheckBox();
tc1.setCellEditor(new DefaultCellEditor(ckb)); //实例化JComboBox
cob=new JComboBox();
cob.addItem("HN");
cob.addItem("HB");
cob.addItem("BJ");
tc2.setCellEditor(new DefaultCellEditor(cob)); //实例化JTextField
txt=new JTextField("");
txt.setSize(100,26);
tc3.setCellEditor(new DefaultCellEditor(txt)); //JScrollPane
jsp=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
container.add(jsp); //获得自定义的抽象表格模型 this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); } public static void main(String[] args){
new AbstractTableModelTest();
}
}class MyAbstractTableModel extends AbstractTableModel{
//定义表头数据
String[] head={"ID","NAME","SEX(boy)","AGE","ADDRESS","DEMO"};
//创建类型数组
// Class[] typeArray={Object.class,Object.class,Boolean.class,int.class,Object.class,Object.class}; //定义表的内容数据
Object[] data1={"200913420125","SUMMER",new Boolean(true),new Integer(20),"1","NULL"};
Object[] data2={"200913420124","WULEI",new Boolean(true),new Integer(20),"2","NULL"};
Object[] data3={"200913420125","BOOK",new Boolean(false),new Integer(20),"3","NULL"};
Object[] data4={"200913420125","CUP",new Boolean(true),new Integer(20),"4","NULL"};
Object[] data5={"200913420125","MOUSE",new Boolean(true),new Integer(20),"5","NULL"};
//定义表格每一列的数据类型 Class[] typeArray={Object.class,Object.class,Boolean.class,Integer.class,JComboBox.class,Object.class}; Object[][] data={data1,data2,data3,data4,data5}; //获得表格的列数
public int getColumnCount(){
return head.length;
}
//获得表格的行数
public int getRowCount(){
return data.length;
}
//获得表格的列名称
@Override
public String getColumnName(int column){
return head[column];
}
//获得表格的单元格的数据
public Object getValueAt(int rowIndex,int columnIndex){
return data[rowIndex][columnIndex];
}
//使表格具有可编辑性
@Override
public boolean isCellEditable(int rowIndex,int columnIndex){
return true;
}
//替换单元格的值
@Override
public void setValueAt(Object aValue,int rowIndex,int columnIndex){
data[rowIndex][columnIndex]=aValue;
fireTableCellUpdated(rowIndex,columnIndex);
} //实现了如果是boolean自动转成JCheckbox
/*需要自己的celleditor这么麻烦吧。jtable自动支持Jcheckbox,
*只要覆盖tablemodel的getColumnClass返回一个boolean的class,
*jtable会自动画一个Jcheckbox给你,
*你的value是true还是false直接读table里那个cell的值就可以
*/
public Class getColumnClass(int columnIndex){
return typeArray[columnIndex];//返回每一列的数据类型
}
}
解决方案 »
- 请问java对oracle的大数据量的备份异地存储如何实现?
- 哪位大侠能介绍下java下的Date和Timestamp的区别,and他们在应用中不同的特点和适用范围
- java.net.SocketException: Connection reset 帮忙看下什么原因
- JComboBox动态更新问题
- 如何在java中实现公式的输入呢?请高手指点,不胜感激!!!
- 小弟要开发一个新的项目用mySQL+resin,想做个数据连接池不知道从何处下手?
- 关于用JAVA程序来控制和提取文本文件的问题~!!!急........~!!!
- 菜鸟基础问题
- 如何实现用java下载文件?在线等待答复!谢谢
- rs.next运行不了
- JTable 简单用法
- socket closed
这个说法很模糊,能说清楚吗,或者用代码表示?