JAVA-SWT如何在Jtable单元…

java swt代码demo下载地址:http://www.zuidaima.com/share/kswt-p1-s1.htm

项目用到一个需求就是在Jtable单元格中加复选框Jcheckbox或者Jbutton,在网上终于找到了解决的办法。可惜,加两个Jbutton的问题还没有解决。

先记下如何在如何在Jtable单元格中加复选框Jcheckbox和JComboBox。

第一种:自定义自己的TableModel类。

这种方法核心是需要实现getColumnClass()方法,只要覆盖tablemodel的getColumnClass返回一个boolean的class, jtable会自动画一个Jcheckbox给你。说直白一些就是你返回一个boolean类型的值,它会自动在Jtable中画一个checkBox。true选示被选中,false表示未选中。

 

[java]  view plain copy
  1. package com;  
  2.   
  3. import javax.swing.JFrame;  
  4. import javax.swing.JComboBox;  
  5. import javax.swing.JCheckBox;  
  6. import javax.swing.JTextField;  
  7. import java.awt.Container;  
  8. import javax.swing.table.AbstractTableModel;  
  9. import javax.swing.JTable;  
  10. import javax.swing.JScrollPane;  
  11. import javax.swing.DefaultCellEditor;  
  12. import javax.swing.table.TableColumn;  
  13.   
  14. @SuppressWarnings("serial" 
  15. public class AbstractTableModelTest extends JFrame  
  16.   
  17.     private JTable table null 
  18.     private JScrollPane jsp null 
  19.     private JComboBox cob null 
  20.     private JCheckBox ckb null 
  21.     private JTextField txt null 
  22.   
  23.     public AbstractTableModelTest()  
  24.         this.setTitle("JTable的ListSelectionModeld的监听事件");  
  25.         this.setSize(400360);  
  26.   
  27.         // 获取窗体的内容面板  
  28.         Container container this.getContentPane();  
  29.         MyAbstractTableModel1 myModel new MyAbstractTableModel1();  
  30.   
  31.         // JTable  
  32.         table new JTable(myModel);  
  33.         // 获得表格的表格列类  
  34.         TableColumn tc1 table.getColumnModel().getColumn(2);  
  35.         TableColumn tc2 table.getColumnModel().getColumn(4);  
  36.         TableColumn tc3 table.getColumnModel().getColumn(5);  
  37.   
  38.         // 实例化JCheckBox  
  39.         ckb new JCheckBox();  
  40.         tc1.setCellEditor(new DefaultCellEditor(ckb));  
  41.   
  42.         // 实例化JComboBox  
  43.         cob new JComboBox();  
  44.         cob.addItem("HN");  
  45.         cob.addItem("HB");  
  46.         cob.addItem("BJ");  
  47.         tc2.setCellEditor(new DefaultCellEditor(cob));  
  48.   
  49.         // 实例化JTextField  
  50.         txt new JTextField("");  
  51.         txt.setSize(10026);  
  52.         tc3.setCellEditor(new DefaultCellEditor(txt));  
  53.   
  54.         // JScrollPane  
  55.         jsp new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,  
  56.                 JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  
  57.         container.add(jsp);  
  58.   
  59.         // 获得自定义的抽象表格模型  
  60.   
  61.         this.setLocationRelativeTo(null);  
  62.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  63.         this.setVisible(true);  
  64.   
  65.      
  66.   
  67.     public static void main(String[] args)  
  68.         new AbstractTableModelTest();  
  69.      
  70.  
  71.   
  72. @SuppressWarnings("serial" 
  73. class MyAbstractTableModel1 extends AbstractTableModel  
  74.     // 定义表头数据  
  75.     String[] head "ID""NAME""SEX(boy)""AGE""ADDRESS""DEMO" };  
  76.     // 创建类型数组  
  77.     // Class[]  
  78.     // typeArray={Object.class,Object.class,Boolean.class,int.class,Object.class,Object.class};  
  79.   
  80.     // 定义表的内容数据  
  81.     Object[] data1 "200913420125""SUMMER"new Boolean(true),  
  82.             new Integer(20), "1""NULL" };  
  83.     Object[] data2 "200913420124""WULEI"new Boolean(true),  
  84.             new Integer(20), "2""NULL" };  
  85.     Object[] data3 "200913420125""BOOK"new Boolean(false),  
  86.             new Integer(20), "3""NULL" };  
  87.     Object[] data4 "200913420125""CUP"new Boolean(true),  
  88.             new Integer(20), "4""NULL" };  
  89.     Object[] data5 "200913420125""MOUSE"new Boolean(true),  
  90.             new Integer(20), "5""NULL" };  
  91.     // 定义表格每一列的数据类型  
  92.   
  93.     Class[] typeArray Object.classObject.classBoolean.class 
  94.             Integer.classJComboBox.classObject.class };  
  95.   
  96.     Object[][] data data1, data2, data3, data4, data5 };  
  97.   
  98.     // 获得表格的列数  
  99.     public int getColumnCount()  
  100.         return head.length;  
  101.      
  102.   
  103.     // 获得表格的行数  
  104.     public int getRowCount()  
  105.         return data.length;  
  106.      
  107.   
  108.     // 获得表格的列名称  
  109.     @Override  
  110.     public String getColumnName(int column)  
  111.         return head[column];  
  112.      
  113.   
  114.     // 获得表格的单元格的数据  
  115.     public Object getValueAt(int rowIndex, int columnIndex)  
  116.         return data[rowIndex][columnIndex];  
  117.      
  118.   
  119.     // 使表格具有可编辑性  
  120.     @Override  
  121.     public boolean isCellEditable(int rowIndex, int columnIndex)  
  122.         return true 
  123.      
  124.   
  125.     // 替换单元格的值  
  126.     @Override  
  127.     public void setValueAt(Object aValue, int rowIndex, int columnIndex)  
  128.         data[rowIndex][columnIndex] aValue;  
  129.         fireTableCellUpdated(rowIndex, columnIndex);  
  130.      
  131.   
  132.     // 实现了如果是boolean自动转成JCheckbox  
  133.       
  134.     public Class getColumnClass(int columnIndex)  
  135.         return typeArray[columnIndex];// 返回每一列的数据类型  
  136.      
  137.  


 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值