2010-08-16 86 views
2

有沒有人有一個很好的例子來說明如何使用自定義表模型添加/刪除行從JTable?我似乎遇到的問題是如何在添加或刪除項目時讓表格保持更新。JTable添加/刪除行到自定義表模型(更新表顯示)

這裏真正簡單的想法是在我的表格上方有一個添加和刪除按鈕,允許用戶隨時更改表格。

+1

「自定義表模型」是指「擴展DefaultTableModel」還是「擴展AbstractTableModel」? – trashgod 2010-08-16 15:03:26

回答

4

這裏是例如用於添加行:

import java.awt.BorderLayout; 
import java.awt.Point; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.util.Vector; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.JViewport; 
import javax.swing.SwingUtilities; 
import javax.swing.table.AbstractTableModel; 

public class RowAdder extends JFrame { 

    final SimpleModel tableData = new SimpleModel(); 
    JTable table = new JTable(tableData); 

    public static void main(String[] args) { 
    RowAdder ra = new RowAdder(); 
    ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    ra.setSize(400, 300); 
    ra.setVisible(true); 
    } 

    public RowAdder() { 
    final JTextField textField = new JTextField(); 
    setLayout(new BorderLayout()); 
    add(new JScrollPane(table), BorderLayout.CENTER); 
    textField.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
     tableData.addText(textField.getText()); 
     textField.setText(""); 
     } 
    }); 
    add(textField, BorderLayout.SOUTH); 
    } 

} 
class SimpleModel extends AbstractTableModel { 

    Vector textData = new Vector(); 

    public void addText(String text) { 
    textData.addElement(text); 
    fireTableDataChanged(); 
    } 

    public int getRowCount() { 
    return textData.size(); 
    } 

    public int getColumnCount() { 
    return 3; 
    } 

    public Object getValueAt(int row, int column) { 
    return textData.elementAt(row); 
    } 

} 
以上從裁判

http://www.java2s.com/Tutorial/Java/0240__Swing/AddrowstoaTable.htm

結帳本教程的JTable中:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html

具體地,對於表模型檢查:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html#data

我覺得這個教程應該回答你所有的問題。

0

您必須通知JTable對象更改基礎表模型。該表並未觀察模型,而是等待事件。

每次更改(或一組更改)後,創建一個TableModelEvent並調用表tableChanged方法。