2015-03-13 2 views
0

Мой главный класс расширяет JFrame и имеет JPanel, содержащий графический компонент, ранее я имел следующий код:Обновление графики в JPanel, когда кнопка нажата

public class StartGUI extends JFrame implements ActionListener { 

    public StartGUI { 

    graphArea = new JPanel() { 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      drawNetwork(myNetwork, this, g); 
       } 
}; 

      add(graphArea); 
     } 

Однако теперь я хочу, чтобы изменить область графики для отображения только после того, как я нажму JButton, как бы я переместил этот JPanel для обновления drawNetwork в методе actionPerformed?

public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == readButton) { 
     graphArea = new JPanel() { 
      public void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       drawNetwork(myNetwork, this, g); 

      } 
     }; 
    } 

Вышеприведенное не работает, как бы исправить это?

+0

Не можете ли вы просто создать графику и сделать ее незаметной. call graphArea.setVisible (true) в actionPerformed() – StanislavL

+0

Нет, так как это упрощение моего кода. Настоящая кнопка предлагает выбрать файл, который изменит график. – user3371750

ответ

2

Как fasr, как я понимаю из вашего комментария, вам нужно просто разделить модель (myNetwork) и view (graphArea).

Создать и добавить graphArea но

 public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (myNetwork!=null) { 
       drawNetwork(myNetwork, this, g); 
      } 
     } 

Initilly сеть является нулевым (или это может быть какой-то чек IsInitialized()). Как только файл выбран и создается сеть, просто вызовите функцию graphArea .repaint(), чтобы отразить изменения модели.

0

Вы создаете новый графический файл JPanel, но не добавляете его в какой-либо контейнер. В вашем старом коде есть звонок add(graphArea);, который отсутствует в новом коде.

+0

К сожалению, это не сработало, я действительно надеялся, что смогу просто обновить paintComponent без создания нового JPanel каждый раз. – user3371750

+0

Вам не нужно создавать новую панель каждый раз. На самом деле, вы не должны. Просто сохраните ссылку как поле в классе и используйте ее в слушателе. –

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