我有一个扩展JPanel的PanelFormes类,我将其用作容器。我还有另外两个JPanel,一个用于绘制一些图形,第二个包含按钮。这两个JPanel包含在第一个中,使用BorderLayout。
我的按钮应该调用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);
}
}
我想我给了你所有相关的信息。 我的问题是,当我尝试使用按钮按钮GetForme绘制一个图形时,我不仅得到了图形,而且还有一些奇怪的屏幕截图 - 我刚按下的按钮的副本,它粘贴在我的JPanel的左上角,我真的很想知道...... 如果我试图通过直接调用ajoutForme来绘制图形,它就可以正常工作。 ActionListener必须有一些东西,但我无法理解... 我是Java的新手,任何帮助都将非常感谢。 感谢
答案 0 :(得分:2)
如果您setOpaque(true)
,请验证您是否完全呈现了组件边界定义的区域;如果没有,请使用setOpaque(false)
。如果问题仍然存在,请修改您的问题以包含展示该工件的sscce。