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();
}
});
}
}
표 모델 -
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);
}
}
Model.java
는 기본적으로 나는 빈 행을 추가하려면 편집 메뉴에서 액션을 사용하고 싶습니다. 제발 다른 링크로 대답하지 마! 나는 그것을 찾았지만 그것을 이해하지 못하거나 내 프로그램에 적합하지 않다!편집 : 소스가 MadProgrammer으로 업데이트되었습니다! 한 가지 문제가 남아 있습니다. JTable을 어떻게 업데이트하여 창 크기를 조정해야하고 테이블이 업데이트되는 순간에 새 행이 표시됩니까?
- 도움이 @MadProgrammer 댓글
1- 데이터 모델을 변경하면 배열이이 작업에 적합하지 않습니다. 2 - 테이블 모델에 새로운 행 "객체"를 만들 메소드를 추가하십시오. – MadProgrammer
@MadProgrammer 배열을 변경할 수 없습니다. 전체 프로그램을 기반으로해야합니다. 새 행 객체의 의미는 무엇입니까? – Gerret
행은 대개 어떤 종류의 Object로 표현되며, 사용자의 경우이 배열은 2D 배열입니다. 배열은 당신이 성취하고자하는 것에 적합하지 않습니다. 동적으로 크기를 늘리기가 어렵고 오버 헤드가 높습니다. 'ArrayList'에 데이터를 저장하는 것이 더 좋을 것입니다.'ArrayList