Java - изменить текст метки при нажатии кнопки

Поэтому я хочу, чтобы ярлык изменял свой текст при нажатии кнопки. Но когда я пытаюсь использовать 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");            
    }
}

3 ответа

Решение

Несколько проблем с вашим кодом:

, Ты никогда не звонил setText на этикетке внутри вашего actionPerformed() метод.

, JLabel labelUpn является локальным для конструктора. Сделайте его переменной класса, если вы хотите получить к нему доступ изнутри actionPerformed()

Имея это в виду, вы можете сказать, какая кнопка была нажата путем приведения e.getSource() в JButton вы можете затем получить его текст (который я предполагаю "UPN"), вызвав для него функцию getText().

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());
    }

Я только что прочитал твой код. Это может решить вашу проблему. Вы не вызывали Button_name.setText("Text") в методе actionPerformed. Код находится по адресу https://textsaver.flap.tv/lists/1ppi

Может быть, это решение вашей проблемы.....

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("Stackru");
        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();
    }
}
Другие вопросы по тегам