我有一个5页的应用程序。
在第一页(AdressPanel
)上,您将一些信息(如equipmentNumber)输入到文本字段中。然后单击按钮以更新其他页面并转到下一页(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);
答案 0 :(得分:6)
问题不在于范围或可达性,而在于执行顺序。
btnAdoptData1.addActionListener(...)
设置ActionListener
以便在单击按钮后执行,然后立即返回并继续使用initialize
方法,该方法会立即创建new JLabel(equipmentNumber)
。< / p>
这意味着在您创建JLabel
时,equipmentNumber
变量仍然具有其默认值null。 ActionListener
和作业equipmentNumber = "1234567890"
直到稍后才会执行。
如果您希望JLabel
反映键入的值,则只需在键入后设置标签文本。例如,做:
lblEquipmentnumberRevisionDocuments.setText(equipmentNumber);
当您显示该页面时。或者在显示该页面之前不要创建标签。