gpt4 book ai didi

java - 如何禁止 JPanel 在 Java 中执行任何操作

转载 作者:行者123 更新时间:2023-11-29 03:39:09 29 4
gpt4 key购买 nike

我在禁用 JPanel 以在其内部调用任何方法时遇到问题。我设置了一个带有 2 个 JPanel 的框架来控制框架的图形。问题是,如果我将一个新的 JPanel 添加到 Frame 并且我还删除了之前存在的旧 JPanel,那么旧 JPanel 中的 paint 方法仍然会被调用。

这是我用来测试的代码:

开始类:

    import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Start implements WindowListener, KeyListener{
public static void main(String[] args) {
new Start();
}

Frame frame = new Frame("Frame");

TestPanel P1 = new TestPanel();
TestPanel P2 = new TestPanel();

static boolean active = true;

public Start() {
frame.setSize(500,500);
frame.setLocationRelativeTo(null);
frame.addWindowListener(this);
frame.addKeyListener(this);
frame.setVisible(true);
frame.add(P1);
for (Object c : frame.getComponents()){
System.out.println(c.toString());
}
}

@Override
public void keyPressed(KeyEvent e) {
if (active){
frame.remove(P1);
frame.add(P2);
}else{
frame.remove(P2);
frame.add(P1);
}
active = !active;
for (Object c : frame.getComponents()){
System.out.println(c.toString());
}
}

@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}

测试面板类:

    import java.awt.Graphics;
import javax.swing.JPanel;


public class TestPanel extends JPanel{
boolean active = Start.active;

@Override
public void paint(Graphics g) {
System.out.println(active);
}
}

这个程序总是打印“true”,告诉我只有对象 P1 是 Activity 的,而 P2 什么也不做,即使它显示在屏幕上也是如此。

所以我想问的是如何让 P1 对象在不在屏幕上时停止调用 paint 方法,并让 P2 对象在显示时调用其 paint 方法。

最佳答案

让我们开始

TestPanel P1 = new TestPanel();
TestPanel P2 = new TestPanel();

P1P2 是同一个类的独立实例。

外观

static boolean active = true;

// From TestPane
public void paint(Graphics g) {
System.out.println(active);
}

因此,无论屏幕上是哪个面板,它总是会显示 active 的值。

您没有提供任何方法来实际识别对象的不同实例,那么,您怎么知道 P1 实际上开始调用了??

关于java - 如何禁止 JPanel 在 Java 中执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962831/

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