我需要幫助向我的JTable添加一個空行。我爲我的JTable使用了AbstractTableModel!我在這裏有一個小的可執行程序,所以幫助我更容易。用AbstractTableModel將行添加到JTable中
主類 - 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,以便在必須調整窗口大小並更新表格時顯示新行!
- 謝謝大家幫忙
1-改變你的數據模型,數組不適合這個任務。 2-添加一個方法,將在您的表模型中創建一個新的「對象」行 – MadProgrammer
@MadProgrammer我無法改變我需要它的數組,我的整個程序都是基於它的。你對新的行對象意味着什麼? – Gerret
一行通常由某種對象表示,在你的情況下,這是一個2D數組。數組不適合你想要實現的內容。它們很難動態增加,並且在做時會產生很高的開銷。將數據存儲在ArrayList中會更好,您可以使用ArrayList