Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextField未更新_Java_Swing_Jtextfield - Fatal编程技术网

Java JTextField未更新

Java JTextField未更新,java,swing,jtextfield,Java,Swing,Jtextfield,我有两个独立的组件,一个是扩展JTable的类,另一个是扩展JPanel(包含表单)的类 当应用程序运行时,这两个文件都显示在同一个视图中,当我单击表上的一行时,我希望表单上的textfiled得到更新,但什么也没有发生 我使用observer(form类是监听器)模式将单击的行发送到包含要更新的表单字段的类/面板,接收到值,但不会更新textfields 下面的代码位于form类中,它更新表单字段,form类作为侦听器添加到table类中,单击表行时触发下面的方法 public void on

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

当应用程序运行时,这两个文件都显示在同一个视图中,当我单击表上的一行时,我希望表单上的textfiled得到更新,但什么也没有发生 我使用observer(form类是监听器)模式将单击的行发送到包含要更新的表单字段的类/面板,接收到值,但不会更新textfields

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

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();

}

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

有关和的更多答案,请参阅此链接

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


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

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

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());
        }
    });
}
有关和的更多答案,请参阅此链接

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

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

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执行此类操作


事件在单个事件线程上处理。在那里,GUI对其他事件没有响应,应该推迟以后使用invokeLater

执行这些操作。请输入完整的代码,以便更好地理解您的问题。您是否运行了调试以查看textField是否真的更新了?若要查看它是否来自UIC,是否确定在单击表行时触发了该方法?你不应该重新油漆和重新验证。设置文本应该可以很好地工作,也许这就是原因。什么都没有发生,或者它只是“冻结”?为了获得更好的帮助,请尽快发布一个简短的、可运行的、可编译的,大约在上午一点左右。发布完整的代码,以便更好地理解您的问题。您是否在调试中运行,以查看文本字段是否真的更新了?若要查看它是否来自UIC,是否确定在单击表行时触发了该方法?你不应该重新油漆和重新验证。设置文本应该可以正常工作,也许这就是原因。什么都没有发生,或者它只是“冻结”?为了更好地帮助您,请尽快发布一个简短、可运行、可编译的,大约在上午一点左右的问题//这是表类公共类TableParcelList扩展JTable{//这是表类,呈现表结构,不定义事件处理程序}//这是表类公共类TableParcelList扩展了JTable{//这是表类,呈现表结构,不定义事件处理程序}@ykel这样我们永远无法解决您的问题。给我们看更多的代码。我可以给出一个使用相同STMT的示例。您已经拥有并且将毫无问题地工作。因此,如果我们能获得更多信息,那就更好了。@ykel这样我们永远无法解决您的问题。给我们展示更多的代码。我可以给出一个使用相同STMT的示例。你已经有了,而且会毫无问题地工作。所以,如果我们能得到更多的信息就更好了。