Java:将事件传递给另一个组件

标签 java swing events jpanel

抱歉,我不知道这是否很清楚,但我对 Java 还很陌生。

所以我有一个带有 BorderLayout 的 JFrame,其中包含一个 JPanel 和一个 JButton。

我想要做的是,当我的 JPanel 中发生某些情况时,我想要更改 JButton 的文本,或者启用/禁用它。我该怎么做呢?如何从 JPanel 访问 JButton?我知道一些方法,但我认为它们不是最好的方法。

最好的方法是什么?

提前致谢

最佳答案

最简单的情况是当您的 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");
   }

});

这里唯一需要注意的是,您应该在 button 声明附近使用 final 修饰符(因为 java 没有真正的闭包):

final JButton button = new JButton ("Click me");
JPanel panel = new JPanel ();

panel.addMouseListener (new MouseAdapter () {
   ....
});
<小时/>

更复杂的情况是当您的组件彼此不了解或者系统状态发生更改并且组件状态(例如按钮名称或更严重的内容)也应该更改时。在这种情况下,您应该考虑使用 MVC 模式。这是来自 JavaWorld 的一个非常好的教程:MVC meets Swing .

关于Java:将事件传递给另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588185/

相关文章:

java - 如何隐藏 fragment 并刷新 Activity 以显示这一点

Java在方法内部添加关闭钩子(Hook)

c# - 如何从外部为 UserControl 内的控件分配事件处理程序?

java - 我有一套配料。我需要在 Java 中检索包含这些成分的所有食谱

java - 单击 jbutton 后 Swing 框架不保持或停留

java - 如何在不同的类中访问此关键字

java - 是什么导致 Java JLabel 图标的图像质量差?

asp.net - 如何将验证限制为特定触发器?

.net - 在 .NET 中使用事件处理程序

java - ImageIO 无法读取某些图像