首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java TableModel不更新?

Java TableModel不更新?
EN

Stack Overflow用户
提问于 2017-09-23 01:27:59
回答 1查看 684关注 0票数 0

更新

我找到了@MadProgrammer的答案,它起了作用!

单击按钮更新JTable

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

我假设您也可以扩展JTable并将该方法放入扩展类中。也许有更有效的解决方案,但我会坚持这一个暂时。谢谢!

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

我正在用java制作表格,以显示类"DinnerTable“中对象的值。我构建了一个自定义的DinnerTableModel类,而不是扩展AbstractTableModel并实现TableModel。但是,当我修改原始的"DinnerTable“对象时,tableModel中的相应对象一点也不改变。我搜索到的这个问题的解决方案是创建一个TableModelListener。但是,我还有另一个JTable,它没有这个侦听器,但是它运行得很好。这些表之间的主要区别在于,导致这些对象的值发生变化的JButton与工作表相同,但与JTabbedPane中的非工作DinnerTable位于不同的选项卡上。更新这些DinnerTableModels的有效方法是什么?(我需要其中的38个)。谢谢!

代码语言:javascript
复制
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);
}

}

/

代码语言:javascript
复制
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");
    }
}
}

/

EN

回答 1

Stack Overflow用户

发布于 2017-09-23 01:38:06

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

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

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

有关为自定义对象创建自定义TableModel的逐步指南,请参见TableModel。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46375129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档