1

我有两个独立的组件,一个是扩展类,JTable另一个是扩展类JPanel(包含表单)。

运行该应用程序时,两者都显示在同一个视图上,当我单击表格上的一行时,我希望表单上的文本文件会被更新但没有任何反应我使用观察者(表单类是侦听器)模式发送单击包含要更新的表单字段的类/面板的行,接收到值但不更新文本字段。

下面的代码在表单类中,它更新表单字段,表单类作为侦听器添加到表类中,单击表行时会触发下面的方法

public void onTableRowClick(CollectedParcelEvent e)
{
     JOptionPane.showMessageDialog(null,"test", "test", 1);

    txtCost.setText(Double.toString(e.getSource().getCost()));
    txtCustomerName.setText(e.getSource().getCustomer().getName());


    txtCost.repaint();
    txtCost.revalidate();

}
4

2 回答 2

1
public void onTableRowClick(CollectedParcelEvent e)
{
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            //JOptionPane.showMessageDialog(null,"test", "test", 1);
            txtCost.setText(Double.toString(e.getSource().getCost()));
            txtCustomerName.setText(e.getSource().getCustomer().getName());
        }
    });
}

事件在单个事件线程上处理。在那里,GUI 对其他事件没有响应,应该稍后使用invokeLater推迟执行此类操作。

于 2013-03-28T17:53:09.987 回答
0

我不明白你为什么打电话revalidate();,因为它只是告诉布局管理器根据新添加或删除的组件列表进行重置。

请参阅此链接以获取有关使用revalidate();的更多答案以及此链接

也许,repaint();应该足以进行所需的更改。

所以检查你的方法,看看它是否真的被解雇了。

于 2013-03-28T17:50:25.917 回答