JPanel проблема перерисовки - PullRequest
0 голосов
/ 05 ноября 2010

У меня есть JFrame, и я добавил свой класс JPanel с помощью метода paintComponent().Например, я нарисовал красный прямоугольник, и после некоторого действия я хочу нарисовать зеленый овал.Я пытался вызвать метод repaint() в JPanel, но ничего не происходит.Помогите мне, пожалуйста!

ОБНОВЛЕНИЕ: Это просто пример кода

public class Test extends JFrame implements ActionListener{
private Container content;
private MyPanel em; 
private JButton btn;
    Test() {
        super("test");
        content = getContentPane();
        em = new MyPanel();
        conent.add(em);
        btn = new JButton("Draw");  
        btn.addActionListener(this);
        content.add(btn);   
    }

    public void actionPerformed(ActionEvent e) {
                em.setShape("oval");
    }           

public class MyPanel extends JPanel {
private String shape = "rectangle";
    MyPanel()
    {
    }
    setShape(String shape){
        this.shape = shape;
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(shape == "rectanle")
          g.drawRectangle(100,25,100,200);


        }
        else if(shape == "oval"){
           g.drawOval(100, 25, 175, 175);
        }
}

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Попробуйте позвонить markCompletelyDirty(myComponent) на javax.swing.RepaintManager.

1 голос
/ 05 ноября 2010

Попробуйте заменить shape == "oval" на "oval".equals(shape). В Java строки, равные по equals(), не обязательно равны по ==.

Кроме того, я бы посоветовал вам заменить строковые литералы константами:

class Whatever {
    private final static String OVAL = "oval";

    public void process(String arg) {
        if (OVAL.equals(arg)) {
            // Do something
        }
    }
}

чтобы избежать проблем с орфографическими ошибками (как у вас с "rectangle" и "rectanle").

Вы можете добавить операторы отладки, чтобы проверить, что метод actionPerformed действительно вызывается, и посмотреть, когда выполняется paintComponent, и отследить, какой путь он проходит через ваш код.

Кстати, размещенный код не должен компилироваться: у вас несоответствующие скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...