gpt4 book ai didi

Java TableModel 没有更新?

转载 作者:行者123 更新时间:2023-12-02 12:13:15 25 4
gpt4 key购买 nike

更新:

我找到了 @MadProgrammer 的答案,它成功了!

Updating JTable on button click

基本上,您将一个refresh()方法添加到您的TableModel中,该方法接受更新的对象。然后,每次按下按钮时,都会调用表模型的此方法。

我假设您还可以扩展 JTable 并将此方法放入扩展类中。可能有更有效的解决方案,但我现在会坚持使用这个。谢谢!

/**************************************************** ******************************/

我正在java中制作表格来显示“DinnerTable”类中的对象值。我构建了一个自定义的 DiningTableModel 类,它扩展了 AbstractTableModel 并实现了 TableModel。但是,我似乎当我修改原始的“DinnerTable”对象时,tableModel 中的相应对象根本没有改变。我在谷歌上搜索到的这个问题的解决方案是创建一个 TableModelListener。但是,我还有另一个 JTable,其中没有此监听器,但它工作得很好。这些表之间的主要区别在于,导致这些对象的值发生更改的 JButton 与工作表位于同一选项卡上,但与 JTabbedPane 中的非工作 DiningTable 位于不同的选项卡上。更新这些 DiningTableModel 的有效方法是什么? (我需要 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");
}
}
}

///////////

最佳答案

TableModel 应该存储数据。然后,当数据更改时,您调用 AbstractTableModel 的相应 fireXXX(...) 方法来告诉表重新绘制自身。

然后通过 TableModel 对数据进行更改,TableModel 将更新您的自定义对象。

这基本上意味着dinnertable类数据结构应该是dinnertablemodel的一部分,而不是一个单独的类。

参见Row Table Model有关为自定义对象创建自定义 TableModel 的分步指南。

关于Java TableModel 没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com