2016-10-28 5 views
0

Я вложил Jpanel в другой JPanel. Я хочу обновить один из JPanels, не обновляя другой. У меня есть следующий код, я могу использовать функцию repaint(), но он обновит все JPanels, а не только тот, который я хочу (Time JPanel).Как обновить JPanel, который вложен в другой Jpanel?

Как я могу освежить только время JPanel? Оставив Weather JPanel нетронутым? Я хотел бы иметь возможность сделать это из внешнего потока.

public class MainPanel extends JPanel{ 

public static JPanel TimePanel = new Time(); 
public static Weather WeatherPanel = new Weather(); 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    this.setBackground(Color.BLACK); 
    this.setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0)); 

    TimePanel.setLocation(0, 0); 
    TimePanel.setSize(new Dimension(500, 300)); 
    this.add(TimePanel); 

    WeatherPanel.setLocation(0,300); 
    WeatherPanel.setSize(new Dimension(100, 100)); 
    this.add(WeatherPanel); 

    //repaint();//Just causes recursion 
} 
} 

ответ

2

Ваш код совершенно неправ. Метод paintComponent() используется для рисования с помощью объекта Graphics. Никогда НИКОГДА не добавляйте компоненты в панель или не изменяйте размер или не изменяйте расположение компонента в методе рисования.

Вам не нужно переопределять метод paintComponent().

В конструкторе вашего класса вы создаете дочерние панели и добавляете их на основную панель. Что-то вроде:

public class MainPanel extends JPanel 
{ 

    public JPanel timePanel = new Time(); 
    public Weather teatherPanel = new Weather(); 

    public MainPanel() 
    { 
     this.setBackground(Color.BLACK); 
     this.setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0)); 

     this.add(timePanel); 
     this.add(weatherPanel); 
    } 
} 

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

  1. вы не должны использовать статические
  2. имена переменных начинаются с символа в нижнем регистре.

Предлагаю начать с чтения Swing Tutorial для основы Swing. Вы можете проверить раздел на How To Use Panels для рабочего примера.

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