我有两个独立的组件,一个是扩展JTable
的类,另一个是扩展JPanel
的类(包含一个表单)。
当运行该应用程序时,两者都显示在同一视图上,当我单击表格上的一行时,我希望表单上的textfileds更新但没有任何反应 我使用observer(表单类是侦听器)模式将单击的行发送到包含要更新的表单字段的类/面板,接收值但不更新文本字段。
下面的代码在表单类中,它更新表单字段,表单类作为监听器添加到表类中,单击表行时触发下面的方法
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();
}
答案 0 :(得分: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 来做这些事情。
答案 1 :(得分:0)
我不明白你为什么要调用revalidate();
,因为它只是告诉布局管理器根据新添加或删除的组件列表重置。
有关using revalidate();
和also this one
也许,repaint();
应该足以满足所需的变化。
请检查您的方法,看看它是否真的被解雇了。