Java Swing JTable 表格【16:复选框JCheckBox作为表格元素】

来源:互联网 发布:java如何创建线程池 编辑:程序博客网 时间:2024/06/05 08:23

上一篇介绍了组合列表框作为表格元素的例子,这篇根据上篇的DefaultCellEditor的构造方法,再来练习一个复选框的例子

这个例子首先在创建数据时,复选框那一列的值默认值一个给得是false,一个给的是true,所以界面打开的时候会一个是选中,一个是没选中,如图:

这里写图片描述

代码如下:

package com.acconsys.swing.chapter14;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.DefaultCellEditor;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;/** * 使用复选框作为编辑器来编辑表格中的单元格 *  * @author burns *  */public class Test18 {    public Test18() {        JFrame f = new JFrame();        MyTable18 mt = new MyTable18();        /**         * 由于MyTable类继承了AbstractTableModel,并且实现了getColmunCount()、getRowCount()、         * getValueAt()方法 由此可以通过通过MyTable18来产生TableModel的实体         */        JTable t = new JTable(mt);        JCheckBox jc1 = new JCheckBox();        t.getColumnModel().getColumn(4)                .setCellEditor(new DefaultCellEditor(jc1));        t.setPreferredScrollableViewportSize(new Dimension(550, 30));        JScrollPane s = new JScrollPane(t);        f.getContentPane().add(s, BorderLayout.CENTER);        f.setTitle("ColumnModelDd");        f.pack();        f.setVisible(true);        f.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });    }    public static void main(String[] args) {        new Test18();    }}class MyTable18 extends AbstractTableModel {    Object[][] p = {            { "王鹏", new Integer(66), new Integer(32), new Integer(98), false },            { "宋兵", new Integer(85), new Integer(69), new Integer(154), true }, };    String[] n = { "姓名", "语文", "数学", "总分", "及格与否" };    @Override    public int getRowCount() {        return p.length;    }    @Override    public int getColumnCount() {        return n.length;    }    @Override    public Object getValueAt(int rowIndex, int columnIndex) {        return p[rowIndex][columnIndex];    }    @Override    public String getColumnName(int column) {        return n[column];    }    @Override    public Class<?> getColumnClass(int columnIndex) {        return getValueAt(0, columnIndex).getClass();    }    @Override    public boolean isCellEditable(int rowIndex, int columnIndex) {        return true;    }    @Override    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {        p[rowIndex][columnIndex] = aValue;        fireTableCellUpdated(rowIndex, columnIndex);    }}
0 0
原创粉丝点击