从不同的选项卡更改JLabel的文本

时间:2013-12-13 16:19:03

标签: java swing nullpointerexception jlabel jtabbedpane

我似乎无法从另一个标签中更改JLabel的文字。

例如: 标签1具有:

    JLabel headerLbl = new JLabel("Original Title");
    headerLbl.setSize(275, 40);
    headerLbl.setLocation(75, 10);
    headerLbl.setFont(new Font("Serif", Font.PLAIN, 28));
    headerLbl.setForeground(Color.BLUE);
    firstPanel.add(headerLbl);

然后,Tab 2将是一个选项选项卡,您可以在其中更改headerLbl的文本。到目前为止我的代码是:

private void initializeOptionsTab()
  {
    JPanel optionsPanel = new JPanel();
    optionsPanel.setLayout(null);

    JLabel headerLbl = new JLabel("Change Name To:");
    headerLbl.setSize(150, 25);
    headerLbl.setLocation(150, 15);
    optionsPanel.add(headerLbl);

    this.compTxtFld = new JTextField();
    this.compTxtFld.setSize(200, 20);
    this.compTxtFld.setLocation(120, 45);
    optionsPanel.add(this.compTxtFld);

    JButton setNewNameButton = new JButton("Set New Name");
    setNewNameButton.setSize(130, 25);
    setNewNameButton.setLocation(150, 85);
    optionsPanel.add(setNewNameButton);


    setNewNameButton.addActionListener(new ActionListener() 
    { 
        public void actionPerformed(ActionEvent e) 
        { 
            FrameMain.this.setNewNameButtonClick(); 
        }

    });
    this.tabbedPane.addTab("Options", optionsPanel);
  }

然后Button的代码是:

private void setNewNameButtonClick()
  {
    setTitle(this.compTxtFld.getText());

    headerLbl.setText(this.compTxtFld.getText());
  }

所以这给了我一个线程“AWT-EventQueue-0”的异常java.lang.NullPointerException for lines

我的猜测是我无法从标签2访问标签1中的headerLbl。我需要做什么才能访问它?

1 个答案:

答案 0 :(得分:0)

首先,让2个标签都命名为headerLbl是一个坏主意,即使它们使用不同的方法也是如此,因为它会在编码时引起混淆。

我能想到的最简单的解决方案是将headerLbl声明为类变量

所以这样:

public class FrameMain{
     JLabel headerLbl = new JLabel();
   //The rest is the same

}

然后在你的第二个方法中,将headerLbl的名称更改为类似changeNameLbl的东西......所以它们不会冲突