Странное поведение JPanel при вызове repaint () - PullRequest
1 голос
/ 10 февраля 2012

У меня есть класс PanelFormes, расширяющий JPanel, который я использую в качестве контейнера. У меня также есть два других 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);
}            
}

Я думаю, что дал вам всю необходимую информацию. Моя проблема в том, что когда я пытаюсь нарисовать фигуру с помощью кнопки buttonGetForme, я не только получаю фигуру, но и получаю странный снимок экрана с той самой кнопки, которую я только что нажал, которая вставлена ​​в верхний левый угол моего JPanel. Мне очень интересно как ... Если я попытаюсь нарисовать фигуру, вызвав ajoutForme напрямую, она работает просто отлично. Должно быть что-то с ActionListener, но я не могу понять, что ... Я новичок в Java, любая помощь будет очень ценится. Спасибо

1 Ответ

2 голосов
/ 10 февраля 2012

Если вы setOpaque(true), убедитесь, что вы полностью визуализируете область, определенную границами компонента;если нет, используйте setOpaque(false).Если проблема не устранена, отредактируйте ваш вопрос, включив в него sscce с экспонатом.

Приложение: см. Также Рисование в AWT и Swing: Opacity .

...