java - 为什么无法达到我的可变 equipmentNumber?

标签 java swing actionlistener

我有一个 5 页的应用程序。

在第一页 (AdressPanel) 上,您在文本字段中输入一些信息,例如设备编号。然后单击按钮以更新其他页面并转到下一页 (LiftDataRevisionDocumentsPanel)。上面有一个 JLabel,它应该显示您在第 1 页输入的值。

但是无论我做什么,它都不显示输入的值。

我已经为 equipmentNumber 尝试了几个关键字:static, final, public, private 但没有任何变化。当我使用 final 时,我收到错误消息 the final field ... cannot be assigned

请注意:我没有在示例代码中使用前面提到的文本字段,而是尝试将字符串“1234567890”直接放入equipmentNumber。这两种方式都行不通,请参阅 ActionListener。

那么为什么我不能访问变量 equipmentNumber/更改第二页上的标签?

public class TestApplication {
    static String equipmentNumber;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestApplication window = new TestApplication();
                    window.frmTool.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public TestApplication() {
        initialize();
    }

    private void initialize() {
        frmTool = new JFrame();
        frmTool.setResizable(false);
        frmTool.setBounds(100, 100, 700, 850);
        frmTool.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmTool.getContentPane().setLayout(new CardLayout(0, 0));

        JButton btnAdoptData1 = new JButton("Use Data");
        btnAdoptData1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                equipmentNumber = "1234567890";
                AdressPanel.setVisible(false);
                DangerJudgementScrollPane.setVisible(true);
                DangerJudgementContentPanel.setVisible(true);
            }
        });

        GridBagConstraints gbc_btnAdoptData1 = new GridBagConstraints();
        gbc_btnAdoptData1.insets = new Insets(10, 10, 10, 10);
        gbc_btnAdoptData1.anchor = GridBagConstraints.EAST;
        gbc_btnAdoptData1.gridx = 0;
        gbc_btnAdoptData1.gridy = 6;
        AdressPanel.add(btnAdoptData1, gbc_btnAdoptData1);

        JLabel lblEquipmentnumberRevisionDocuments = new JLabel(equipmentNumber);
        GridBagConstraints gbc_lblEquipmentnumberRevisionDocuments = new GridBagConstraints();
        gbc_lblEquipmentnumberRevisionDocuments.anchor = GridBagConstraints.WEST;
        gbc_lblEquipmentnumberRevisionDocuments.insets = new Insets(0, 0, 5, 5);
        gbc_lblEquipmentnumberRevisionDocuments.gridx = 1;
        gbc_lblEquipmentnumberRevisionDocuments.gridy = 0;
        LiftDataRevisionDocumentsPanel.add(lblEquipmentnumberRevisionDocuments, gbc_lblEquipmentnumberRevisionDocuments);

最佳答案

问题不在于范围或可达性,而在于执行顺序。

btnAdoptData1.addActionListener(...) 设置一个 ActionListener 稍后在单击按钮时执行,然后立即返回并继续 initialize 方法,它会立即创建 new JLabel(equipmentNumber)

这意味着在您创建 JLabel 时,equipmentNumber 变量仍具有其默认值 null。 ActionListener 和赋值 equipmentNumber = "1234567890" 稍后才会执行。

如果您希望 JLabel 反射(reflect)键入的值,您需要仅在键入后设置标签文本。例如,做:

lblEquipmentnumberRevisionDocuments.setText(equipmentNumber);

当您显示该页面时。或者在显示该页面之前根本不创建标签。

关于java - 为什么无法达到我的可变 equipmentNumber?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854252/

相关文章:

Java应用程序部署

java - ActionListener 的问题

java - 为什么我们不能从 actionPerformed() 中得到 'throws' 异常

java - 尝试使用 Erwin Vervaet 的框架存储临时集合并获取 ClassCastException

java - C中字符串的哈希函数

java - Android手写识别库

java - GUI、JComboBox 和打开新窗口

java - 单个 SSL 上的多个 Jetty 域

java - 如何在面板中添加图像?

java - JComponent 没有出现在 JApplet 中