您的位置:首页 > 编程语言 > Java开发

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

2016-01-14 21:47 741 查看

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

以下贴出实例代码:

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);
}
}


执行结果如下图:



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jtable swing 编辑器