2010-01-20 3 views
1

Ok говорят, у меня есть JPanel «контроль» и JPanel «graphPanel» в другой JPanelRepaint на ребенка JPanel

public class outer extends JPanel implements ActionListener{ 
    private JPanel controls,graphPanel; 
    private JButton doAction 

    public outer(){ 
     JPanel controls = new JPanel(); 
     JButton doAction = new JButton("Do stuff"); 
     doAction.addActionListener(this); 
     controls.add(doAction); 

     JPanel graphPanel = new JPanel(); 
     this.add(controls); 
     this.add(graphPanel); 
    } 



public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==doAction){ 
     //How do I fire paintComponent of controls JPanel on this click 
} 

Как я сделать «graphPanel» перекрашивать после того, как моя кнопка нажата

+0

посмотреть на REVALIDATE() вызов на JPanel. – Kylar

+0

если я звоню перекрасить дважды, он работает – user252693

ответ

1

DoAction и graphPanel объявляется дважды - один раз на уровне класса, а затем снова в методе:

private JPanel controls,graphPanel; // declared here first 
    private JButton doAction; // declared here first 

    public outer(){ 
     JPanel controls = new JPanel(); // Whoops, declared here again 
     JButton doAction = new JButton("Do stuff"); // Whoops, declared here again 
     doAction.addActionListener(this); 
     controls.add(doAction); 

     JPanel graphPanel = new JPanel(); // Whoops, declared here again 
     ... 

в методе удалить объявление и сделать их простое задание, например:

controls = new JPanel(); // no leading 'JPanel' 

ли это и дополнительный код перекрашивать не будет бросать NPE

Смежные вопросы