【问题标题】:How to update JTextfield after click SAVE button单击“保存”按钮后如何更新 JTextfield
【发布时间】:2015-07-27 12:02:28
【问题描述】:

我有一个主框架:JFrame>contentFrame>ScrollPane>BigPanel>panel_1T

private JPanel contentPane;
private JPanel BigPanel;
private JPanel panel_1T;

在 panel_1T 中,我放置了一个带有 actionListener 的 FOOD 按钮:

JButton button_19 = new JButton("FOOD");
button_19.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {

            newFoodUI nf = new newFoodUI();//Open other class
            nf.setVisible(true);
            nf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);      

                                                 }
                                               });
panel_1T.setLayout(new GridLayout(0, 2, 0, 0));
panel_1T.add(button_19);

当用户单击 FOOD 按钮时,newFoodUI 类中的新 JFrame 将显示。: JFrame>contentPane>panel>tabbedPane>panel_3>panel_5

在 panel_5 中,我放了一个 JTextField:

public static JTextField textField_3;

textField_3 = new JTextField();
panel_5.add(textField_3, "9, 4, fill, default");
textField_3.setColumns(10);

用户将一些文本写入textField_3。然后用户单击 panel_3 中的 SAVE 按钮,它将执行此操作:

JButton button_4 = new JButton("SAVE");
button_4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

                setContentPane(contentPane);
                panel_3.revalidate();
                panel_3.repaint();
                panel_3.updateUI();

                panel_5.revalidate();
                panel_5.repaint();
                panel_5.updateUI();


                contentPane.revalidate();
                contentPane.repaint();

            JOptionPane.showMessageDialog(null, "Saved !");

        }
    });
    button_4.setBounds(873, 396, 75, 33);
    contentPane.add(button_4);
}

结果是,当我点击 SAVE 按钮并关闭 newFoodUI 中的 Frame 时,我将通过点击 FOOD 按钮重新打开来检查我写的文本是否已保存。但它没有保存我写的文字。

【问题讨论】:

    标签: java eclipse jbutton jtextfield


    【解决方案1】:

    您必须保存来自文本字段textField_3.getText() 的值,并在显示textField_3.setText(value) 时手动将此值设置为文本字段。所以你必须在你的项目中保持你的价值或在某个地方持久存储。

    【讨论】:

    【解决方案2】:

    这里有几件事需要修复,我不会给你完整的代码,但我会指出一些错误。首先让我们考虑一下您的button_19 听众

    public void actionPerformed(ActionEvent ae) {
    
            newFoodUI nf = new newFoodUI();//Open other class
            nf.setVisible(true);
            nf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);      
    
    }
    

    执行此操作时,它会创建一个全新的 newFoodUI 对象,并且不给它任何参数。那么如果你什么都不给它,这个框架怎么会知道它创建之前发生的任何事情呢?此外,您明确表示DISPOSE_ON_CLOSE,如果您希望重用它,可以使用HIDE_ON_CLOSE

    然后在您的JButton button_4 = new JButton("SAVE"); 侦听器中,您希望将数据保存在文本字段中,但您的实现对文本字段没有任何作用。例如,您应该从textField_3 获取文本并将其写入文件或发送回第一个JFrame

    Then there is the issue of using multiple JFrames in the first place.

    【讨论】:

    • 感谢您告知多个 JFrame,需要将 JFrame 更改为 JDialog.. 但我仍然使用 DISPOSE_ON_CLOSE,因为它仍然显示保存的文本..
    • @doraemon dispose 非常好。隐藏是一种不必一直使用new 创建对象的方法。
    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多