使用TableColumnModel和AbstractTableModel的一個例子

本文通过具体示例展示了如何使用 Java Swing 中的 TableColumnModel 来定制 JTable 的列属性,包括设置单元格编辑器等。

 TableColumnModel本身是一個接口,里面定義了許多與表格的行和列有關的方法,通常情況下我們不會直接實現此接口。

而是利用JTable里面的getColumnModel()方法取得TableColumnModel對象,然后利用此對象對字段進行設置

使用TableColumnModel類的getColumn()方法可以獲得TableColumn對象。

TableColumn對象可以設置表中字段的寬度、某行的表頭,設置輸入較復雜的數據類型,

這里使用TableColumn提供的setCellEditor()

package test;

import java.awt.Dimension;
import java.awt.BorderLayout;

import javax.swing.table.AbstractTableModel;
import javax.swing.JFrame;
import javax.swing.table.AbstractTableModel;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.DefaultCellEditor;
import javax.swing.JScrollPane;
public class TableColumnModelTest{
 public TableColumnModelTest(){
  JFrame frame = new JFrame();
  MyTable mt = new MyTable();
  JTable table = new JTable(mt);//利用MyTable來建立JTable

  JComboBox combox = new JComboBox();//建立一個JComboBox對象
  //在JComboBox對象中增加三個條目Taipei、ChiaYi、HsinChu
  combox.addItem("Taipei");
  combox.addItem("ChiaYi");
  combox.addItem("HsinChu");

  //通過JTable先取得TableColumnModel對象,再由TableColumnModel對象的getColumn()方法取得TableColumn
  //TableColumn類可以針對每一行相應的列做具體的設置
  table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(combox));
  table.setPreferredScrollableViewportSize(new Dimension(550,30));
  JScrollPane scrollPane = new JScrollPane(table);

  frame.getContentPane().add(scrollPane,BorderLayout.NORTH);
  frame.setTitle("TableColumnModelTest");
  frame.pack();
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 public static void main(String[] args){
  new TableColumnModelTest();
 }
}
class MyTable extends AbstractTableModel{
 Object[][] p = {
  {"阿呆","Taipei",new Integer(66),new Integer(32),
  new Integer(98),new Boolean(false),new Boolean(false),},
  {"阿瓜","ChiaYi",new Integer(85),new Integer(69),
  new Integer(154),new Boolean(true),new Boolean(false),},
 };
 String[] n = {"姓名","居住地","語文","數學","總分","及格","作弊"};
 public int getColumnCount(){
  return n.length;
 }
 public int getRowCount(){
  return p.length;
 }
 public String getColumnName(int col){
  return n[col];
 }
 public Object getValueAt(int row,int col){
  return p[row][col];
 }
 public Class getColumnClass(int c){
  return getValueAt(0,c).getClass();
 }
 //復寫AbstractTableModel的isCellEditable()方法,是表格中的列可以編輯
 public boolean isCellEditable(int rowIndex,int columnIndex){
  return true;
 }
 //復寫AbstractTableModel的setValueAt()方法,是表格中的列修改后可以留在表格
 public void setValueAt(Object value,int row,int col){
  p[row][col] = value;
  fireTableCellUpdated(row,col);
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值