【问题标题】:Java - Change label text on button press [closed]Java - 按下按钮更改标签文本[关闭]
【发布时间】:2017-11-30 19:00:06
【问题描述】:

我根据要求编辑了问题

所以我想要一个标签在按下按钮时更改它的文本。但是,当我在单击按钮时尝试在标签上使用 setText() 时,它无法识别它。这是为什么呢?

public class SingleButton extends JPanel
    implements ActionListener {
    protected JButton b1;

    public SingleButton() {       
        b1 = new JButton("Axxxxxx"/*, leftButtonIcon*/);
        b1.setActionCommand("enableb1");
        b1.setEnabled(true);        
        b1.addActionListener(this);

        add(labelUpn);
        labelUpn.setText("UPN number here");
    }

    public void actionPerformed(ActionEvent e) {
        if ("enableb1".equals(e.getActionCommand())) {
            b1.setEnabled(false);
            labelUpn.setText("New Text");            
    }
}

【问题讨论】:

  • Minimal - 使用尽可能少的代码,但仍然会产生同样的问题。如果我不向您展示所有代码,您将无法重现问题。
  • 只用 1 标签和 1 按钮编写相同类型的代码,别无其他。如果它重现了问题 - 你得到了你的 MVCE,如果没有 - 与你的真实代码进行比较并找出差异。
  • 发布minimal reproducible example。我们不会看 github 项目

标签: java jframe jbutton jlabel actionevent


【解决方案1】:

您的代码存在一些问题:

。您从未在 actionPerformed() 方法内的标签上调用 setText。

。 JLabel labelUpn 对于构造函数是本地的。如果您想从actionPerformed() 中访问它,请将其设为类变量

考虑到这一点,您可以通过将e.getSource() 转换为 JButton 来判断点击了哪个按钮,然后您可以通过调用 getText() 来获取其文本(我假设为“UPN”)。

public class ButtonDemo extends JPanel
implements ActionListener {
    protected JButton b1, b2, b3, b4;
    protected JLabel labelUpn;

    public ButtonDemo() {
        //...
        labelUpn = new JLabel("UPN number here on button press");
        //...
    }

    public void actionPerformed(ActionEvent e) {
        //...
        JButton clicked = (JButton) e.getSource();
        labelUpn.setText(clicked.getText());
    }

【讨论】:

  • 不错,这就是问题所在。永远不要在 actionPerformed() 中调用 setText 是什么意思?它很糟糕吗?使用 e.getSource() 是否被认为更好?
  • 我的措辞不好。我的意思是您在发布的代码中没有在 actionPerformed() 中调用 setText(),并不是说您永远不应该这样做。
  • 啊,是的。我把它遗漏了,因为它不起作用,所以把它拿出来了!问题是 labelUpn 需要是一个类变量。
【解决方案2】:

也许这是你的问题的解决方案.....

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class JLabelDemo {

    public JLabel labelText;
    public JLabelDemo() {
        JFrame f = new JFrame("JLabel Demo");
        f.setVisible(true);
        f.setSize(500, 500);
        f.setLayout(null);

        labelText = new JLabel("StackOverflow");
        labelText.setBounds(50, 100, 150, 30);
        f.add(labelText);

        JButton btn = new JButton("Change Text");
        btn.setBounds(70, 200, 150, 60);
        f.add(btn);


        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                labelText.setText("Google.com");
            }
        });

    }

    public static void main(String[] args) {
        new JLabelDemo();
    }
}

【讨论】:

    【解决方案3】:

    我刚刚阅读了您的代码。 这可能会解决您的问题。 您没有在 actionPerformed 方法中调用 Button_name.setText("Text") 代码位于 https://textsaver.flap.tv/lists/1ppi

    【讨论】:

    • 您好,感谢您的评论,但这是我要更改的标签文本,而不是按钮文本本身。从另一张海报中找到答案!
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多