如何刷新JPanel?

时间:2015-01-06 00:10:26

标签: java swing

我一直在用java编写程序,所以我决定使用Swing作为我的GUI。我没有很多关于swing的经验,所以我不确定它如何管理我发送给它的对象。

我的程序包含一个需要定期更新的图表(可能每秒10次),使用以下代码在JPanel中绘制:

private JFrame graphWindow = new JFrame("Graph");
graph = new JPanel()
{
    protected void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;

        // Draw the graph and labels in g2

    }
}
graphWindow.add(graph, BorderLayout.CENTER);
graphWindow.pack();
graphWindow.setSize(windowDimensions);
graphWindow.setVisible(true);

现在我拥有它以便图表显示一次,但我不知道如何告诉它刷新。我知道如何编写随时间运行的循环,但我不知道如何在循环中刷新图形。

我感谢你能给我的任何帮助。

1 个答案:

答案 0 :(得分:3)

你看过Javadocs吗?

来自java.awt.Component.repaint()

  

重新绘制此组件。

     

如果此组件是轻量级组件,则此方法会尽快调用此组件的paint方法。否则,此方法会尽快调用此组件的更新方法。

     

注意:有关AWT和Swing使用的绘制机制的更多信息,包括如何编写最有效的绘制代码的信息,请参阅AWT和Swing绘画。

     

<强>时间:
  JDK1.0

这可以与Swing计时器一起使用,以定期重新绘制/“刷新”图形。

示例:

import javax.swing.Timer;

/// ...

final JPanel graph = new JPanel() {
    protected void paintComponent(Graphics g) {
        // ... your painting code ...
    }
}
// The following Timer repeats 10 times per second (100 millisecond delay):
Timer timer = new Timer(100, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        graph.repaint();
    }
});