我需要帮助为我的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);
}
}
基本上我想在编辑菜单中使用一个Action来添加一个空行。请不要回答其他链接!我搜索它但不理解它或它不适合我的程序!
编辑: 根据{{3}}的建议更新了来源!只剩下一个问题了。我如何更新JTable,以便在我必须调整窗口大小并且表正在更新时显示新行!
答案 0 :(得分:3)
正如@MadProgrammer评论的那样,数组在概念上很容易理解,但很难扩展和扩展。合同。相反,请使用Collection
。在此example中,MyModel
管理以List<Row>
实施的ArrayList<Row>
。每个Row
都是普通的旧Java对象(POJO),每个列都有一个属性。尝试使用构造函数作为示例添加插入新行的方法,然后尝试向Row
添加列。该示例使用静态嵌套类来避免混乱。