[英]Add row to JTable with AbstractTableModel
在向JTable添加空行時,我需要幫助。 我為JTable使用AbstractTableModel! 我在這里為您提供了一個小型可執行程序,因此可以更輕松地為我提供幫助。
主類-TestClass.java
package testproject;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JTable;
public class TestClass {
String[] header = {"Name", "Quantity"};
ArrayList<Object[]> data = new ArrayList<Object[]>();
public TestClass() {
data.add(new Object[]{"Apple", "234"});
data.add(new Object[]{"Banana", "123"});
data.add(new Object[]{"Cranberry", "346"});
JFrame frame = new JFrame();
JTable table = new JTable(new Model(data, header));
JMenuBar menubar = new JMenuBar();
JMenu editmenu = new JMenu("Edit");
Action addrowaction = new AbstractAction("Add Row") {
private static final long serialVersionUID = 1433684360133156145L;
@Override
public void actionPerformed(ActionEvent e) {
data.add(new Object[9]);
}
};
frame.add(table);
frame.setJMenuBar(menubar);
menubar.add(editmenu);
editmenu.add(addrowaction);
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestClass();
}
});
}
}
表模型-Model.java
package testproject;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class Model extends AbstractTableModel{
private static final long serialVersionUID = 6889542282067432083L;
private String[] header;
private ArrayList<Object[]> data;
public Model(ArrayList<Object[]> data, String[] header) {
this.header = header;
this.data = data;
}
@Override
public int getColumnCount() {
return header.length;
}
@Override
public String getColumnName(int column) {
return header[column];
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int row, int column) {
return data.get(row)[column];
}
@Override
public void setValueAt(Object value, int row, int column) {
data.get(row)[column] = value;
fireTableCellUpdated(row, column);
}
}
基本上,我想在編輯菜單中使用操作來添加一個空行。 請不要用其他鏈接回答! 我搜索了它,但不理解它,或者它不適合我的程序!
編輯:更新了MadProgrammer建議的源! 只剩下一個問題。 我如何更新JTable,以便在必須調整Window大小和Table正在更新的同時顯示新的Row!
正如@MadProgrammer所說,數組在概念上很容易理解,但很難擴展和收縮。 而是使用Collection
。 在此示例中 , MyModel
管理實現為ArrayList<Row>
的List<Row>
ArrayList<Row>
。 每Row
是一個普通舊式Java對象( POJO ),具有每列的屬性。 嘗試以構造函數為例,添加一種用於插入新行的方法,然后嘗試向Row
添加一列。 該示例使用靜態嵌套類來避免混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.