Java Swing JTable 表格【15:组合列表框作为表格元素】

来源:互联网 发布:表格删除重复数据 编辑:程序博客网 时间:2024/05/23 23:44

在实际开发中,很多表格中的单元格都是以组合框作为编辑器的,组合框能带来很大的灵活性

以下贴出实例代码:

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.JComboBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;/** * 这段代码展示如何使用组合列表框作为表格中的元素 使得可以在列表框中选择所需要的数据,相当于输入不同数据 *  * @author burns *  */public class Test17 {    public Test17() {        JFrame f = new JFrame();        /**         * 由于MyTable类继承了AbstractTableModel         * 并且实现了getColumnCount(),getRowCount()、getValueAt         * ()方法,因此可以通过MyTable来禅城TableModel的实体         */        MyTable17 mt = new MyTable17();        // 利用MyTable来建立JTable        JTable t = new JTable(mt);        // 建立一个JComboBox的对象。        JComboBox c = new JComboBox();        // 在新建的JComboBox对象里新增三个项目        c.addItem("江西省九江市");        c.addItem("浙江省杭州市");        c.addItem("安徽省合肥市");        /**         * 利用JTable所提供的getTableColumnModel()方法取得TableColumnModel对象         * 再由TableColumnModel类所提供的getColumn()方法取得TableColumn对象         * TableColumn类可针对表格中的每一行做具体的设置 例如设置字段的宽度,某行的标头,设置输入较复杂的数据类型等。         * 在这里利用TableColumn类所提供的setCellEditor()方法,将JComboBox作为第二行的默认编辑组件         */        t.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));        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 Test17();    }}// 继承表格抽象类的表格模型class MyTable17 extends AbstractTableModel {    private static final long serialVersionUID = 1L;    Object[][] p = {            { "王鹏", "江西省九江市", new Integer(66), new Integer(32), new Integer(98) },            { "宋兵", "浙江省杭州市", new Integer(85), new Integer(69),                    new Integer(154) }, };    String[] n = { "姓名", "居住地", "语文", "数学", "总分" };    @Override    public int getRowCount() {        return p.length;    }    @Override    public int getColumnCount() {        return n.length;    }    @Override    public Object getValueAt(int row, int col) {        return p[row][col];    }    @Override    public String getColumnName(int column) {        return n[column];    }    @Override    public boolean isCellEditable(int rowIndex, int columnIndex) {        return true;    }    @Override    public void setValueAt(Object value, int rowIndex, int columnIndex) {        p[rowIndex][columnIndex] = value;        fireTableCellUpdated(rowIndex, columnIndex);    }}

执行结果如下图:

这里写图片描述

除了组合框编辑器,这里贴上源代码,可以看到还有其他编辑器

这里写图片描述

0 0