Java-changejlabel

Java-changejlabel,java,string,swing,class,jlabel,Java,String,Swing,Class,Jlabel,我有一个名为Keys.java的按钮类,它将一个按钮面板返回给名为Control.java的类。我在Control.java中有一个JLabel,但我想做的是在按下按钮时更改JLabel。你打算怎么做 我曾尝试在Keys.java中设置一个字符串,该字符串会根据按钮进行更改,然后将JLabel的文本设置为该字符串,但似乎不起作用 关于如何实现这一点,您有什么想法吗?可能是您更新了错误的字符串或设置了错误的相应标签文本。两者都是必需的。在下面的示例中(使用您的名字),这两个更新在按钮的action

我有一个名为Keys.java的按钮类,它将一个按钮面板返回给名为Control.java的类。我在Control.java中有一个JLabel,但我想做的是在按下按钮时更改JLabel。你打算怎么做

我曾尝试在Keys.java中设置一个字符串,该字符串会根据按钮进行更改,然后将JLabel的文本设置为该字符串,但似乎不起作用


关于如何实现这一点,您有什么想法吗?

可能是您更新了错误的字符串或设置了错误的相应标签文本。两者都是必需的。在下面的示例中(使用您的名字),这两个更新在按钮的
actionPerformed()
中紧密耦合。显示了一种更松散耦合的方法


请发布复制您的问题的最少代码。也许这篇文章可以帮助您解决您的问题可能是引用的问题—没有在JButton的ActionListener中正确引用已查看的JLabel—但同样没有代码,谁知道呢。请提供足够的信息,以便您的问题能够得到回答,这样我们就不必浪费时间猜测了。是否有人错误地编辑了代码?@GagandeepBali:什么代码?这就是问题的症结所在——尽管有很多要求,但原始海报不会发布任何内容。
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/** @see https://stackoverflow.com/questions/9053824 */
public class JavaGUI extends JPanel {

    private Control control = new Control();
    private Keys keys = new Keys("Original starting value.");

    public JavaGUI() {
        this.setLayout(new GridLayout(0, 1));
        this.add(keys);
        this.add(control);
    }

    private class Control extends JPanel {

        public Control() {
            this.add(new JButton(new AbstractAction("Update") {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Command: " + e.getActionCommand());
                    keys.string = String.valueOf(System.nanoTime());
                    keys.label.setText(keys.string);
                }
            }));
        }
    }

    private class Keys extends JPanel {

        private String string;
        private JLabel label = new JLabel();

        public Keys(String s) {
            this.string = s;
            label.setText(s);
            this.add(label);
        }
    }

    private void display() {
        JFrame f = new JFrame("JavaGUI");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JavaGUI().display();
            }
        });
    }
}