绘制的图形会闪烁,然后在调整窗口大小

时间:2015-09-08 07:31:57

标签: java swing graphics2d

这里的目标是我可以点击颜色和形状,然后点击figurePanel上的两个点。那个彩色的形状填充在figurePanel上,我可以在彼此的顶部添加形状等。我还需要将当前日期显示在figurePanel的角落,在所有绘制的形状的顶部。我能够创建形状(虽然它们总是覆盖日期)没有问题,但每当我调整大小或最小化窗口时,所有绘制的形状都会消失。我已经尝试从Graphics(更新,绘画,重绘等)实现了很多不同的方法,但没有找到解决这个问题的方法。我以为paintComponent()会处理所有这些,但显然不是。随意指出任何可以以更好的方式实施的东西,总是乐于学习新东西。

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            drawFigures();
            figuresPanel.add(dateLabel, c);
        }

        @Override
        public Dimension getPreferredSize() {
            return (new Dimension(800, 600));
        }

        private void addFigure(Figure figure) {
            figureList.add(figure);
            listArea.append(figure.toString() + "\n");
            figure.fill(getGraphics());
        }

        private void drawFigures() {
            for (Figure f : figureList) {
                f.fill(getGraphics());
            }
        }

1 个答案:

答案 0 :(得分:2)

我会建议一些可能对你有帮助的事情。

  1. 在您的方法drawFigures()而不是getGraphics()中,为什么不将Graphics中的paintComponentMethod实例作为参数传递给方法,用它来绘制对象。这将确保您使用的是您用于绘制的Graphics的相同实例。

  2. 在您的方法addFigure(Figure figure)中,我建议您删除行figure.fill(getGraphics());,以完全绘制对象。而是在mouseClicked(MouseEvent event)语句后插入switch方法:

    revalidate();
    repaint();
    

    这实际上应该照顾对象的绘制完全在用于显示组件的同一Graphics对象上完成。

  3. 我希望这会有所帮助。

相关问题