gpt4 book ai didi

java - JPanel重绘不起作用

转载 作者:行者123 更新时间:2023-12-01 11:17:48 25 4
gpt4 key购买 nike

我有一个简单的任务。

有一个框架。该框架中有两个面板。在第二个面板中有一个按钮。当用户单击该按钮时,第一个面板必须更改其内容。

这是一个代码:

package test;


import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;


class MyJPanel1 extends JPanel {
MyJPanel1() {
this.add(new JButton("MyJPanel1"));
}
}


class MyJPanel2 extends JPanel {
MyJPanel2() {
this.add(new JButton("MyJPanel2"));
}
}


class MyFrame extends JFrame {
JPanel topPanel = null;

MyFrame() {
super("Test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new GridLayout(0, 1, 20, 20));

topPanel = new MyJPanel1();
this.add(topPanel);

JPanel bottomPanel = new JPanel();
this.add(bottomPanel);

JButton button = new JButton("switch");
button.addMouseListener(new MouseClickListener());
bottomPanel.add(button);

this.pack();
this.setVisible(true);
}

class MouseClickListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
topPanel = new MyJPanel2();
System.out.println("switch");

topPanel.invalidate();
topPanel.validate();
topPanel.repaint();

MyFrame.this.invalidate();
MyFrame.this.validate();
MyFrame.this.repaint();
}
}
}


public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});
}
}

但这行不通。单击按钮后,我在控制台中看到文本,但第一个面板保持不变。我读到我必须使用 invalidate() validate() 和 repaint() 方法,我确实这样做了,但这没有帮助。

如有任何帮助,我们将不胜感激。

最佳答案

如果您想“切换”面板,那么您应该使用CardLayoutCardLayout 允许 2 个(或更多)组件共享容器中的同一空间,但一次只有一个组件可见。

阅读 Swing 教程中关于 How to Use CardLayout 的部分了解更多信息和工作示例。

关于java - JPanel重绘不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31590095/

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