2010-09-08 90 views
2

我有一个绑定到我的EventTracker bean的JTable,本质上是一个包含在我将用作append/clear(即简单日志)的列表的包装器。问题是,当我将条目添加到列表并尝试触发事件时,我没有看到任何更改。我正在使用NetBeans IDE。绑定数据触发更改后没有更新的Swing/JTable

EventTracker bean被添加到视图并实例化为eventTracker1。从那里,我右键单击表格并选择'表格内容...'。表模型绑定到eventTracker1,绑定表达式是'$ {eventList}'。这些列设置正确,以便对eventList中的条目进行操作。

// From inside EventTracker.java 
public static final String EVENT_LIST_PROPERTY = "eventList"; 
public List getEventList() { 
    System.out.println("Handing out eventList with size: " + Integer.toString(eventList.size())); 
    return eventList; 
} 

public void setEventList(List incomingList) { 
    List oldList = eventList; 
    eventList = new ArrayList(incomingList); 
    propertySupport.firePropertyChange(EVENT_LIST_PROPERTY, oldList, eventList); 
} 

的方法中的firePropertyChange似乎当我之外的代码上setEventList工作,以适应specSo,似乎因为那时getEventList被调用,列表大小正在上升的预期激发关闭事件。只是表格没有渲染。我能做些什么来完成这项工作?

回答

2

假设您的数据模型来自AbstractTableModel,您可以显式更新模型并激发在抽象父级中实现的适当更新方法。此外,更新必须在EDT上进行,通常使用invokeLater()。另请参阅Listening for Data ChangesFiring Data Change Events

EventQueue.invokeLater(new Runnable() { 

    @Override 
    public void run() { 
     // update model, which should fire the appropriate event 
    } 
}); 
0

你需要告诉数据模型变化表:

.fireTableDataChanged()

是正确的方法;假设您的表从传统表格模型下降。

(所以是的,我同意trashgod)

1

我是在获取数据绑定工作真正意图。建议的答案是很好的阅读,但会导致我写很多代码。我不想处理给出行数/列数逻辑和所有额外的工作。因此,此解决方案可能会提供较少的控制,但对于此只读工作流程非常快捷。

http://swinglabs.org/docs/presentations/2007/DesktopMatters/beans-binding-talk.pdf的文件给了我一个瘦。诀窍是使用ObservableCollection/ObservableList(new ArrayList<Event>)作为数据存储。无论何时添加其他条目,它都会自动反映在JTable中。

太棒了!

0

目前尚不清楚你是如何绑定的EventTracker类的table.I'm假设你使用相应的编辑器和渲染器类,然后设置渲染和这样table.setDefaultRenderer(EventTracker.class,new EventTrackerRender());table.setDefaultEditor(EventTracker.class,new EventTrackerEditor());。编辑编辑器的情况下使用只有当您需要通过表更改EventTracker bean时。

如果它从表外(即通过代码)完成覆盖Table模型中的setValueAt函数,然后使用getValueAt获取EventTracker对象(它是当前对象)并进行必要的更改(如果Eventtracker是可变对象)。在不可变对象的情况下,创建EventTracker的新对象并将其设置为对象数组。在此之后,您应该调用fireTableDataChanged()这将重新绘制整个表格或调用fireTableCellUpdated(row,col)以使特定单元格再次呈现。

相关问题