2010-08-16 47 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方法。

相关问题