JTable
과 관련된 작은 프로젝트에서 사용자가 버튼을 클릭하고 행을 테이블에 추가해야합니다 (이 버튼의 이름은 addrow
입니다). 필자는 기본 테이블 모델을 확장하는 사용자 지정 테이블 모델 (Mytablemodel
)을 사용했습니다. 테이블이 처음 다섯 행과 4 열로 구성됩니다. 이후에 사용자가 버튼을 클릭하여 행을 더 추가 할 수 있습니다.사용자 정의 테이블 모델을 사용하여 JTable에 새 행을 삽입하는 방법은 무엇입니까?
아무 것도하지 않는 addrow
버튼을 제외하고 내 코드의 모든 것이 올바르게 작동합니다. 나는 어떤 도움을 주셔서 감사합니다. 코드에 대한
public class AddingNewRows extends JFrame {
JTable mytable;
JButton addrow;
String[] columns={"Admission number","Name","School","Year"};
TableColumn tc;
int defaultrows=5;
int rows=new Mytablemodel().getRowCount(),columnscount=new Mytablemodel().getColumnCount();
List data=new ArrayList();
Mytablemodel mytbm;
//
public AddingNewRows(){
super("adding rows");
for(int initialrows=0; initialrows<5; initialrows++){
String[] items={"1","2","3","4"};
data.add(items);
}
mytbm=new Mytablemodel();
mytable=new JTable(mytbm);
JScrollPane scroll=new JScrollPane(mytable);
addrow=new JButton("ADD ROW");
//
JPanel buttonpanel=new JPanel();
buttonpanel.setLayout(new BoxLayout(buttonpanel,BoxLayout.X_AXIS));
buttonpanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
buttonpanel.add(addrow);
//
add(scroll,BorderLayout.CENTER);
add(buttonpanel,BorderLayout.SOUTH);
addrow.addActionListener(new Myactions());
}
public class Mytablemodel extends DefaultTableModel{
@Override
public String getColumnName(int column) {
return columns[column];
}
@Override
public Object getValueAt(int row, int col){
return ((String[])data.get(row))[col];
}
@Override
public boolean isCellEditable(int row, int col){
return true;
}
@Override
public void setValueAt(Object value,int row, int col){
((Object[])data.get(row))[col]=value;
fireTableCellUpdated(row,col);
}
@Override
public Class getColumnClass(int column){
return getValueAt(0,column).getClass();
}
@Override
public int getColumnCount(){
return columns.length;
}
@Override
public int getRowCount(){
return increaserows;
}
@Override
public void addRow(Object[] mynewdata){
int rownum=data.size();
System.out.println(rownum);
data.add(madata);
fireTableRowsInserted(rownum,rownum);
}
}
//
private class Myactions implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
if(event.getSource()==addrow){
Object[]newdata={"","","",""};
mytbm.addRow(newdata);
}
}
}
public static void main(String[] args) {
AddingNewRows frame=new AddingNewRows();
frame.setVisible(true);
frame.setSize(400,400);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
}
모든 소문자로 타이핑 한 단어는 웅얼 거리는 사람의 말을 듣는 것처럼 읽기가 어렵습니다. 문장의 시작 부분에있는 대문자, I라는 단어, 'ArrayList'또는 Oracle과 같은 적절한 이름을 사용하십시오. –
'Mytablemodel extends AbstractTableModel {'스스로 대신 ** DefaultTableModel' **을 확장하십시오. 그것은 당신을 위해 이런 종류의 물건을합니다. 하지만 더 빨리 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소 완성 입증 가능한 예) 또는 [SSCCE] (http://www.sscce.org/) (Short, Self 포함, 올바른 예). –
@AndrewThompson 테이블에 입력 된 모든 데이터는 나중에 onther 단추를 통해 데이터베이스에 저장되며 정상적으로 작동합니다. 내가 왜 사용자 정의 테이블 모델을 사용했는지 그 이유는 DefaultTableModel을 사용하여 데이터를 데이터베이스에 저장할 수 없다고 생각하기 때문입니다. 또한 fireTableRowsInserted (int, int) 메소드에 문제가 있음을 나타냅니다. 매개 변수 자체 및 메서드 호출 위치 및시기 –