私人JPanels在所有JFrame上重新粉刷

时间:2015-10-09 09:56:48

标签: java swing jpanel repaint

当多个JFrame排队等待重绘时,Swing重绘事件将所有帧的内容绘制到所有帧上,就像它与其他帧共享JPanel一样。

在下面的示例中,“第1帧”应仅绘制正方形,而“第2帧”应仅绘制椭圆即可。相反,他们的图形在某种程度上重叠。 JPanels不以任何方式,形状或形式共享,因此这是不可能的。

Swing Repaint

我想看到的是:

Swing Repaint Desired

出于某种原因,这只发生在循环中绘制帧时(例如,60 FPS)。

我在Windows 10 x64上运行Java 1.8.0_25。

我已经在这几个小时了,我在网上找不到任何关于这个...有没有人知道如何避免这个问题?或者如果有解决方法?

以下是代码:

    JFrame frame1 = new JFrame("Frame 1");
    frame1.setSize(256, 256);
    frame1.setLocation(0, 0);
    JPanel panel1 = new JPanel() {
        public void paintComponent(Graphics g) {
            g.fillRect(32, 32, 32, 32);
        }
    };
    frame1.add(panel1);
    frame1.setVisible(true);

    JFrame frame2 = new JFrame("Frame 2");
    frame2.setSize(256, 256);
    frame2.setLocation(300, 0);
    JPanel panel2 = new JPanel() {
        public void paintComponent(Graphics g) {
            g.fillOval(66, 32, 32, 32);
        }
    };
    frame2.add(panel2);
    frame2.setVisible(true);

    while(true) {
        Thread.sleep(16);
        panel1.repaint();
        panel2.repaint();
    }

解决方案(感谢MadProgrammer):

在覆盖super.paintComponent(g)方法后,我没有立即添加paintComponent()。这解决了这个问题。不幸的是,这也会删除JPanel以前的图形内容。

0 个答案:

没有答案