当前位置: 首页 > 知识库问答 >
问题:

Java侦听器调用重绘

戈曾琪
2023-03-14

我有一个JPanel,我的(游戏)程序在其中绘制了一些由一段代码决定的东西。到目前为止,一切都很好。我写了一个非常基本的侦听器,它侦听程序背景模型的变化,然后应该告诉GUI更新,即移动游戏外观。

所有这些都发生在mouseListener触发的方法中。

我猜这就是问题所在,因为在JPanel中再次单击鼠标会正确更新JPanel,我可以看到模型移动的部分。

JPanel的代码:

@Override
        public void paintComponent(Graphics g) 
        {
            super.paintComponent(g);
            update(g);
            
        }

更新调用了很多AWT代码,这对我的问题来说并不重要,它只是绘制了游戏板。

(伪)来自我的控制器的代码,由鼠标侦听器在鼠标事件上执行:

public void human_and_cpu_move()
{
human_move(int x, int y, int x2, inty2)
cpu_make_move();
}

背景模型代码

public void cpu_make_move()
{
do_something_cool;
tell_listener_something_cool_happened();
}

后台侦听器:

public class Background_listener()
{
Controller myController;
Background myBackground;
public Background_listener(Controller controller, Background background){
myController = controller;
myBackground = background;
}
public void tell_listener_something_cool_happened()
{
myController.get_JPanel.repaint();
}
}

我看到了什么行为?CPU移动只有在我再次单击JPanel时才会完成,它们不是自己完成的。我想要什么?我希望CPU移动完成后立即显示。事先感谢您的任何帮助,我找不到类似的问题。

共有1个答案

余善
2023-03-14

我解决了这个问题:我忘了告诉GUI更新它从背景模型中保存的游戏板表示。简单的问题,简单的解决方案

 类似资料:
  • 我正在为maven多模块项目研究缓存实现(exstremescale),我在下面添加了maven依赖项 添加了缓存注释 cache-manager.xml 缓存只适用于项目的一个maven模块,我可以看到缓存拦截器调用,对于maven模块的其余部分,它忽略了@cacheable注释(它不会进入拦截器)。 我们没有PostConstructor或自我调用 我们使用atomikos作为事务管理器和CX

  • 我目前正在为一个包含大量模块的大项目创建TestNG测试用例。现有的大多数单元测试实际上都是集成测试,因为它们非常依赖于/opt文件夹中的配置文件以及正在运行的数据库和消息队列。 为了使事情进一步复杂化,测试用例使用配置位于resources/meta-inf/services/org.TestNG.itestnglistener文件中的TestNG侦听器。这个文件中的侦听器触发所有测试用例(正如

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real

  • 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">

  • 1. 前言 本节介绍侦听器 watch 的使用方法。包括什么是侦听器,侦听器的特点,以及如何对不同类型的数据进行监听。其中重点掌握对不同类型的数据如何使用侦听器,了解它之后,在才能在之后的日常开发中熟练运用。 2. 慕课解释 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。 — 官方定义 侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据