我在另一个JPanel中嵌套了一个Jpanel。我想刷新其中一个JPanel而不刷新另一个。我有以下代码,我可以使用repaint()函数,但它会更新所有JPanels,而不仅仅是我想要的那个(Time JPanel)。
我如何才能刷新Time JPanel?离开天气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
}
}
答案 0 :(得分: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);
}
}
请注意我是如何更改变量的:
我建议您先阅读Swing基础知识的Swing Tutorial。您可以查看How To Use Panels
部分的工作示例。