【问题标题】:JTextField not updatingJTextField 未更新
【发布时间】:2013-03-19 06:53:48
【问题描述】:

我有两个独立的组件,一个是扩展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();

}

【问题讨论】:

  • 放上你的完整代码,以便更好地理解你的问题..
  • 您是否在调试中运行以查看 textField 是否真的更新了?查看它是否来自 UI
  • 您确定单击表格行时会触发该方法吗?您也不必重新绘制和重新验证。设置文本应该可以正常工作,也许这就是原因。
  • 什么都没有发生,或者它只是“冻结”?
  • 为了获得更好的帮助,请尽快发布 SSCCE,简短、可运行、可编译,大约上午问题

标签: java swing jtextfield


【解决方案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 推迟执行此类操作。

【讨论】:

  • //这是表类 public class TableParcelsList extends JTable { // 这是表类,渲染表结构,不定义事件处理程序 }
【解决方案2】:

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

有关using revalidate();also this one 的更多答案,请参阅此链接

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

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

【讨论】:

  • @ykel 这样我们永远无法解决您的问题。向我们展示更多代码。我可以举一个使用相同 stmts 的示例。您拥有并且可以毫无问题地工作。所以,如果我们能获得更多信息会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多