【发布时间】:2012-02-09 23:01:02
【问题描述】:
我有一个扩展 JPanel 的类 PanelFormes,我将它用作容器。我还有另外两个 JPanel,一个用于在其中绘制一些图形,第二个包含按钮。这两个 JPanel 包含在第一个 JPanel 中,使用 BorderLayout。
我的一个按钮应该在应该有图形的地方调用 JPanel 的 repaint 方法。在我的主窗口构造函数中,我这样做:
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新手,任何帮助将不胜感激。 谢谢
【问题讨论】:
-
另见answer。
-
我添加了 this.setOpaque(true);在我的 FormePanel 构造函数中,问题仍然存在。
标签: java swing jpanel actionlistener