抱歉,我不知道这是否非常清楚,但我对Java很新。
所以我有一个带有包含JPanel和JButton的BorderLayout的JFrame。
我想要做的是当我的JPanel中发生某些事情时,我想要更改JButton的文本,或者启用/禁用它。我该怎么办?如何从JPanel访问JButton?我知道一些方法,但我不认为这是最好的方法。
最好的方法是什么?
提前致谢
答案 0 :(得分:1)
最简单的情况是你的JPanel实例和JButton实例在你的代码中相互“看见”,即:
JButton button = new JButton ("Click me");
JPanel panel = new JPanel ();
...
container.add (button);
container.add (panel);
在这种情况下,您可以向面板(或按钮)添加一些事件监听器,并从事件处理程序中更改第二个组件:
panel.addMouseListener (new MouseAdapter () {
public void mouseClicked (MouseEvent e) {
button.setText ("new text");
}
});
这里唯一要考虑的是你应该在final
声明附近使用button
修饰符(因为java没有真正的闭包):
final JButton button = new JButton ("Click me");
JPanel panel = new JPanel ();
panel.addMouseListener (new MouseAdapter () {
....
});
更复杂的情况是,当您的组件彼此不了解或系统状态发生变化时,组件状态(如按钮名称或更严重的情况)也应该更改。在这种情况下,您应该考虑使用MVC模式。这是来自JavaWorld的一个非常好的教程:MVC meets Swing。
答案 1 :(得分:0)
您必须在JPanel上收听活动。 JPanels可以监听按键(KeyListener),鼠标单击(MouseListener)和鼠标移动(MouseMovementListener)。你对哪一个感兴趣?
一旦你知道你想听什么,你必须编写并注册一个监听器,并在JButton中改变一些东西。例如:
// define JButton jb, JPanel jp, put one inside the other so that there is some
// free space to click on around the JPanel; declare both as final.
...
// listen to mouse clicks on the panel and updates the button's label
jp.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jb.setText(jb.getText() + ".");
}
});