gpt4 book ai didi

java - 调用 repaint() 时 JPanel 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 04:53:47 26 4
gpt4 key购买 nike

我有一个扩展 JPanel 的 PanelFormes 类,我将其用作容器。我还有另外两个 JPanel,一个用于在其中绘制一些图形,第二个包含按钮。这两个 JPanel 使用 BorderLayout 包含在第一个 JPanel 中。

我的一个按钮应该调用 JPanel 的重绘方法,其中应该有数字。在我的主窗口构造函数中,我这样做:

boutonGetForme.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

ajoutForme(rect);
}
});

方法 ajoutForme,在我的主窗口类中:

// Methode ajout de forme, normalement appelee par le controleur
public void ajoutForme(Forme f) {

//dire au jpanel quelle forme on veut dessiner et comment
jpanel.definirForme(f);
//mettre a jour le jpanel
jpanel.repaint();
}

最后是 PanelFormes 类:

package gui;

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

public class PanelFormes extends JPanel {

private Forme f;
PanelFormes() {
f = new Rectangle(1,1,1,1);
}
public void definirForme(Forme f) {
this.f = f;
}
public void paintComponent(Graphics g) {
//dessiner la forme
f.dessine(g);
}
}

我想我已经向您提供了所有相关信息。我的问题是,当我尝试使用按钮buttonGetForme绘制图形时,我不仅得到了图形,而且还得到了我刚刚按下的按钮的一些奇怪的屏幕截图副本,该副本粘贴在我的JPanel的左上角,我真的很想知道如何...如果我尝试直接调用 ajoutForme 来绘制图形,它工作得很好。 ActionListener 一定有什么东西,但我不明白是什么......我是 Java 新手,非常感谢任何帮助。谢谢

最佳答案

如果您setOpaque(true),请验证您是否完全渲染了组件边界定义的区域;如果没有,请使用setOpaque(false)。如果问题仍然存在,请编辑您的问题以包含 sscce展示了文物。

附录:另请参阅 Painting in AWT and Swing: Opacity .

关于java - 调用 repaint() 时 JPanel 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220282/

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