- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现一个猜词游戏。所附图片给出了我在做什么的想法。我的 GamePane
由两个组件组成,ControlPane
和 HangManPane
,它们是所附图像的顶部和底部部分。当玩家点击 New Game
按钮时,必须通知 GamePane
。随后,GamePane
将从 ControlPane
请求 SecretWord,并将其传递给 HangManPane
以构建模型。
所以这里发生了两件事,我想知道如何实现
ControlPane 应该在用户点击“New Game”按钮时触发通知。因此这个 fireChange 应该发生在 New Game
按钮的 ActionListener 中。
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);
}
}
最佳答案
提供监听器支持“相对”简单。 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/
我正在开发一个摆动程序以显示多张图片。并且可以旋转图片(每个图片都以JComponent实现)。 问题是,当图片旋转时,JComponent的边框不会改变,因此图片会被剪切。 有什么办法也可以旋转边框
我有一个 JPanel 和一个 JButton 向量,我想将每个按钮添加到面板。 我遇到的问题是我有一个代表按钮向量的变量 btns,但宏函数只是将它视为一个符号,而不是一个向量。有没有办法以某种方式
我有一个 swing 应用程序,它覆盖 javax.swing.text.Document 以将基础文档的内容限制为某些字符和文本长度。我想将我的应用程序移植到 Javafx,但我不知道此类是否有 J
我有一个带有面板的简单应用程序,我想在单击它时暂停并重新开始绘画。 object ModulusPatterns extends SimpleSwingApplication { var dela
我似乎无法在 Swing 中强制布局。我有一个 JComponent添加到 JLayeredPane我在 JComponent 上设置了边框.然后,我想立即重新绘制所有内容 - 而不是像 invali
我有一个 Swing 应用程序,我想通过将外部文件从 Windows 资源管理器拖到应用程序上来导入外部文件。我有这个基本功能工作。但是,我想将默认的拖放光标图标更改为应用程序适当的光标。当鼠标键被按
我想在我的 Scala 摆动应用程序中使用一棵树,但该组件在 API 中不可用。 是否包装了 JTree存在吗? 如果没有,你对制作有什么建议吗? 谢谢 最佳答案 即使您可以在 Scala 程序中直接
我目前正在努力使我的 Swing 应用程序看起来更好。我想在这些方面实现一些目标: 这个想法是让每个框都有一个漂亮的标题,背景类似于上图。使用基本的 Swing 组件,我能得到的最接近的东西是添加 T
这是我在 Scala 中使用 Swing 的第一次实验,并且对下面的代码有一些疑问。它所做的只是生成一个带有可改变颜色的彩色矩形的窗口。请随时回答一个或任何一个问题。 1) 我在下面使用了 Java
一个愚蠢的问题,但我真的无法让它起作用:我在 Swing 应用程序中有一些长时间运行的过程,可能需要几分钟。我想在此过程进行时向用户显示进度对话框。我还想阻止用户执行进一步的操作,例如在进程进行时按下
如何获取秋千组件的默认背景色?我的意思是JPanel的默认背景色? 最佳答案 要获取创建面板时将使用的 DEFAULT 颜色,请使用: Color color = UIManager.getColor
我想更改特定表头的背景颜色。在我的应用程序中,我必须将当前月份的标题颜色设置为红色。 我的代码在这里:: jTable1.getTableHeader(). setDefaultRe
我正在努力使在 Java3D Canvas 上显示 Java Swing 组件并与之交互成为可能。我通过将透明 JPanel 绘制到缓冲图像来显示组件,然后使用 J3DGraphics2D 在 Can
嗨 当我在 swing 中创建按钮时,它会在文本周围添加边框,从而使按钮变大一点。 现在,我确实需要那个屏幕空间,我通常做的是创建一个文本项(禁用),它创建更小的组件大小(文本周围更小的空间)并向其添
有scala.swing.BoxPanel,但它似乎没有捕获重点,因为没有与javax.swing.Box工厂方法createHorizontalStrut等效的东西、createHorizo
我的 scala swing 应用程序中有一个 BoxPanel 按钮,这对我来说很难看,因为按钮的大小各不相同。我已将其更改为 GridPanel,但随后它们也垂直填充了面板,我发现这更难看。我怎样
我刚开始学习 Scala,作为学习过程的一部分,我一直在尝试使用 Swing 编写一些简单的脚本。 这是一个非常精简的例子,它展示了我所看到的问题。 SimpleSwingApp: import sc
我刚刚开始使用 clojure 和跷跷板制作 GUI 应用程序。它只创建一个 JFrame 和几个组件。这是代码。 main 函数除了调用 start-gui 什么也不做并在返回后立即退出。 (ns
Scala 是一种很棒的语言,但不幸的是缺少库文档。如何更改组件的初始大小?我什么都没有(故意),但无论如何都希望它是一定的。我目前有 ... contents = new BoxPanel(Orie
基本设置是这样的:我有一个垂直的 JSplitPane,我希望它有一个固定大小的底部组件和一个调整大小的顶部组件,我通过调用 setResizeWeight(1.0) 来完成。在此应用程序中,有一个按
我是一名优秀的程序员,十分优秀!