UPDATE :Java TableModel이 업데이트되지 않습니까?
나는 @MadProgrammer하여이 대답을 발견하고는했다!
Updating JTable on button click
기본적으로, 업데이트 된 객체에 걸리는 당신의 TableModel에 새로 고침() 메소드를 추가 할 수 있습니다. 그런 다음 버튼을 누를 때마다이 테이블 모델의 메서드가 호출됩니다.
난 당신도 JTable의를 확장하고 확장 한 클래스 내에서이 방법을 넣을 수 있다고 가정합니다. 더 효율적인 솔루션이있을 수도 있지만 지금 당장은이를 고수 할 것입니다. 감사합니다.
/********************************************* *******************************/
나는 "클래스에서 객체의 값을 표시하는 자바 테이블을 만드는 중이라서 저녁상". AbstractTableModel을 확장하고 TableModel을 구현하는 것보다 맞춤 DinnerTableModel 클래스를 작성했습니다. 그러나 내 원래의 "DinnerTable"개체를 수정할 때 tableModel의 해당 개체가 전혀 변경되지 않는 것 같습니다. 내가 봤던이 이슈에 대한 해결책은 TableModelListener를 만드는 것이었다. 그러나, 나는 또한이 수신기가없는 다른 JTable을 가지고 있지만 완벽하게 작동합니다. 이러한 테이블 간의 주요 차이점은 이러한 객체의 값을 변경하게하는 JButton이 작업 테이블과 동일한 Tab이지만 JTabbedPane의 작동하지 않는 DinnerTable과 다른 탭에 있다는 점입니다. DinnerTableModels를 업데이트하는 효율적인 방법은 무엇입니까? (나는 그들 중 38 명이 필요할 것이다). 고맙습니다!
package DinnerList;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class DinnerTableModel extends AbstractTableModel implements TableModel{
private final String[] columnNames;
private DinnerTable dt;
public DinnerTableModel(DinnerTable popopo)
{
dt=popopo;
columnNames= new String[1];
columnNames[0]=popopo.getTableNumber()+". "+popopo.getTeacherName();
}
public String getColumnName(int col)
{
return columnNames[0];
}
public Object getValueAt(int rowIndex, int colIndex)
{
if(rowIndex<7)
{
System.out.println(dt.getMembers().size());
if(dt.getMembers().size()>rowIndex)
{
System.out.println("haha");
return dt.getMembers().get(rowIndex);
}
else
{
return null;
}
}
else
{
System.out.println("Error: attempting to getValue at row>=7 in DTM");
return null;
}
}
public Class getColumnClass(int c)
{
return Student.class;
}
public boolean isCellEditable(int row, int col)
{
return true;
}
public void setValueAt(Object b,int row, int col)
{
if(b instanceof Student)
{
dt.getMembers().set(row, (Student)b);
}
else
{
System.out.println("Error: Attemping to put nonstudent into student in DTM");
}
fireTableCellUpdated(row, col);
}
}
///////////////////////////////////
package DinnerList;
import java.util.ArrayList;
import java.util.List;
public class DinnerTable
{
private List<Student> members= new ArrayList<Student>(7);
private int tableNumber=0;
private int capacity=0;
private String teacherName="";
private boolean available=true;
public DinnerTable(int a, int b, String c, boolean d)
{
tableNumber=a;
capacity=b;
teacherName=c;
available=d;
}
public void add(Student s)
{
if(available&&(members.size()<capacity))
{ this.members.add(s); }
else if(!available)
{ System.out.println("Adding Student failed, table "+tableNumber+" not available");}
else
{ System.out.println("Adding Student failed, table "+tableNumber+" is full");}
}
public List<Student> getMembers(){return members;}
public void remove(Student s)
{
if(members.contains(s))
{
members.remove(s);
}
else
{
System.out.println("Failed to remove student from table because it wasn't there");
}
}
}
///////////
귀하가 컴파일하고 실행하는 유효한 [mcve] 코드를 게시하지 않았습니다. 괜찮은 도움이 필요하면이 질문을 만들고 게시하여 개선하십시오. 예, 이것은 당신으로부터 여분의 작업을 요구하고 있습니다. 그러나 당신은 무료로 우리에게 여분의 작업을 요청하고 있습니다, 그래서 이것은 공정한 요구입니다, 나는 생각해야합니다. –