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

使用Jpanel,repaint()方法在类之间进行通信

范鸿畅
2023-03-14

我有一个扩展JPanel的类“GUI”。我有另一个扩展JFrame的类“Buttons”。我试图让JFrame类调用JPanel类中的方法“clearscreen()”,当在JFrame上按下JButton“clearb”时。实现这一工作的唯一方法是在JButton的actionlistener中为JPanel类“GUI”构建对象:

clearB.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent event){
                        GUI g = new GUI();
                        g.clearScreen();

                    }
                }
            );

但是当我调用方法clearScreen()时,它看起来如下所示:

public void clearScreen(){
        xs.clear();
        ys.clear();
        count = 0;
        repaint();
    }

什么都没发生。我想这是因为repaint()方法由于我不知道的原因不能工作。有人请告诉我一个更容易,工作的方式来做我正在努力完成这里。谢了!:d

共有1个答案

秦才
2023-03-14

ActionListener无法工作的原因是,您在其中创建的GUI对象是一个新的GUI对象,该对象与所显示的GUI对象完全无关,因此在未显示的GUI实例上调用clearscreen()方法不会对所显示的GUI实例产生影响。

解决方案是Buttons类保存对可视化GUI对象的有效引用,并调用该引用上的方法。可以通过setter方法或构造函数参数传递引用。

即,

public class Buttons {
  private GUI gui;

  public Buttons (GUI gui) {
    this.gui = gui;
  }

    // in some ActionListener code...
    gui.someMethod();
}

几点评论:

  • 必须有一个扩展JFrame的类是不寻常的。我自己则尽量避免这样做,除非有必要,但通常只在需要时才从JFrame类本身创建JFrames。
  • 我对主窗口类没有GUI变量感到有点惊讶,因为它很可能显示GUI实例。
 类似资料:
  • 我是新来的Java,刚刚开始学习图形用户界面组件。所以,我正在阅读HeadfirstJava,有一个代码解释了的方法。只要用户点击“改变颜色”按钮,它就可以改变椭圆形的颜色。- MyDrawPanel类- 我从这个例子中得到了所有的东西,除了我们调用方法的部分。 书中提到,只需覆盖的方法,当您调用时,它将调用来呈现内容(因为我们不直接调用)。 现在,我通过扩展创建了类,并覆盖了它的方法。现在,当我

  • 问题内容: 我有一些C#代码需要调用Python脚本数千次,每次都传递一个字符串,然后期望返回。可以使用任何版本的Python运行python脚本,因此我不能使用Iron python。建议使用IPC命名管道。我对此没有经验,并且在弄清楚如何在C#和Python之间执行此操作时遇到了麻烦。这是一个简单的过程,还是我正在寻找可观的工作量?这是解决我的问题的最好方法吗? 问题答案: 使用zeromq。

  • 我最初是这样制作程序的。我使用extends Canvas和update方法来不断地绘制更多的点。我的理解是,每次调用repaint()时,新的点都会通过使用update()方法添加到现有的画布上。如果方法是paint()而不是update(),那么每次调用repaint()时,它将绘制一个只有50个点的新画布。这是我的扩展画布的BarnsleyFern类。 下面的代码是扩展JFrame的Barn

  • 有什么建议可以让我做到这一点吗?

  • 问题内容: 有两个Java文件,Server.java和Client.java。两者都放在单独的容器中。 DOCKER FILES: 我用于服务器的dockerfile(位于名为“ Server”的文件夹中)为: 客户端的dockerfile(位于名为``Client’‘的文件夹中)为: 构建容器: 使用以下容器构建容器 运行容器: 我使用命令运行图像。然后我首先运行serverimage。 我得

  • 目前我有一个设置,我的客户机(web应用程序,iOS应用程序等)通过REST调用与我的后端API.NET web应用程序(Nancy)对话。没什么特别的. 我现在需要将这个API拆分为微服务,每个服务可以单独升级/部署。 我的主API(公共)将只执行身份验证,然后调用我的一个微服务,它将在我的专用网络中。 在主API和其他微服务API之间有哪些不同的通信方式?每种方法的优点/缺点? 通信需要是实时