我有一个称为Keys.java的按钮类,它将按钮面板返回到名为Control.java的类。我在Control.java中有一个JLabel,但是我想做的是在按下按钮时更改JLabel。您将如何去做?
我试过在Keys.java中设置一个字符串,该字符串根据按钮而变化,然后将JLabel的文本设置为等于该字符串,但似乎不起作用。
关于如何实现这一点的任何想法?
可能是您更新了错误的字符串或设置了不正确的标签文本。两者都是必需的。在下面的示例(使用您的名称)中,两个更新在按钮的中紧密结合actionPerformed()。这里显示了一种更宽松的耦合方法。
actionPerformed()
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(); } }); } }