gpt4 book ai didi

java - 使用 ChangeListener 触发 Java Swing 中的更改?

转载 作者:行者123 更新时间:2023-11-30 08:28:34 25 4
gpt4 key购买 nike

我正在实现一个猜词游戏。所附图片给出了我在做什么的想法。我的 GamePane 由两个组件组成,ControlPaneHangManPane,它们是所附图像的顶部和底部部分。当玩家点击 New Game 按钮时,必须通知 GamePane。随后,GamePane 将从 ControlPane 请求 SecretWord,并将其传递给 HangManPane 以构建模型。

所以这里发生了两件事,我想知道如何实现

  1. ControlPane 应该在用户点击“New Game”按钮时触发通知。因此这个 fireChange 应该发生在 New Game 按钮的 ActionListener 中。

  2. GamePane 监听通知并将信息传递给 HangManPane

使用 ChangeListener 是合适的。我做了我的部分搜索,但无法掌握如何在此处实现。欢迎任何建议

public class GamePane extends JPanel {

public GamePane(){
ControlPane cp = new ControlPane();
//if user clicks New Game on ControlPane, notify me
//I will then do the following
HangManModel model = new DefaultHangManModel(cp.getSecretWord());
HangManPane hangManPane = new HangManPane(model);

setLayout(new GridLayout(0,1));
this.add(cp);
this.add(pane);

}
}

enter image description here

最佳答案

提供监听器支持“相对”简单。 JComponent 将它的 EventListenerList (listenerList) 作为 protected 变量公开,从而简化了这一过程。

ControlPane 中,您需要一个添加方法...

public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}

你需要一个移除方法

public void removeChangeListener(ChangeListener listener) {
listenerList.remove(ChangeListener.class, listener);
}

现在,您需要一些方法来根据需要实际引发或触发事件...

protected void fireStateChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(evt);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}

现在,当您想告诉注册的监听器 ControlPane 状态已更改时,您只需调用 fireStateChanged,例如...

public void actionPerformed(ActionEvent evt) {
fireStateChanged();
}

现在,在 GamePane 中,您需要针对 ControlPane 的实例注册一个 ChangeListener...

private ControlPane cp;
private HangManPane hangManPane;

//...

public GamePane() {
cp = new ControlPane();
hangManPane = new HangManPane(null);

cp.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
String secret = cp.getSecretWord();
DefaultHangManModel model = new DefaultHangManModel(secret);
hangManPane.setModel(model);
}
});
}

例如……

关于java - 使用 ChangeListener 触发 Java Swing 中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com