JPanel绘制具有特定颜色

时间:2011-10-18 15:33:08

标签: java swing jpanel graphics2d

我发现这个类绘制了不同颜色的圆圈。每个圆圈的颜色是根据颜色的特定顺序确定的,这些颜色在结束时迭代(使用所有颜色一次)。我希望以一种方式修改它,使我有可能单独确定每个圆圈的颜色(在g.setColor上)。换句话说,我希望能够将颜色部署为参数,并从另一个类中的另一个方法调用该方法。

public class DrawingPane extends JPanel {

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Rectangle rect;
        for (int i = 0; i < circles.size(); i++) {
            rect = circles.elementAt(i);
            g.setColor(colors[(i % color_n)]);
            g.fillOval(rect.x, rect.y, rect.width, rect.height);
        }
    }
}

如果你发现我的问题很愚蠢,我想告诉你,让我担心的是这个方法是从JPanel继承的,我不知道如何有效地覆盖它。

4 个答案:

答案 0 :(得分:3)

您的DrawingPane似乎有一个名为Rectangle的{​​{1}}列表(原文如此)。我不知道circles是您的某个类还是标准Rectangle

如果它是您的一个类,那么只需在此类中添加java.awt.Rectangle属性,并在迭代期间从中获取此属性。

如果是标准color,则引入包含矩形和颜色的java.awt.Rectangle类,并使用Circle列表而不是Circle列表

答案 1 :(得分:2)

我不确定你的意思,但是如果你试图从外部类设置圆形颜色,那么使用setter和(如果需要)使用getter将数组作为类的属性:

public class DrawingPane extends JPanel {
    private Color[] colors;

    public void setCircles(Color[] colors) {
       this.colors = colors;
       repaint();
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Rectangle rect;
        if (colors != null) {
           for (int i = 0; i < colors.size(); i++) {
               rect = circles.elementAt(i);
               g.setColor(colors[(i % color_n)]);
               g.fillOval(rect.x, rect.y, rect.width, rect.height);
           }
        }
    }
}

答案 2 :(得分:2)

  

我希望能够将颜色部署为参数并从另一个类中的另一个方法调用该方法

然后,您需要将颜色和形状存储为自定义类的属性。

Custom Painting Approaches显示了如何执行此操作的示例。我会使用DrawOnComponent示例作为起点。您的代码将更加简单,因为您不需要处理拖动。您需要做的就是创建一个addCircle(...)方法,该方法将圆的大小/位置/颜色作为参数。

答案 3 :(得分:2)

你在找这个吗?

您可以在单独的.Java文件中声明类MyCircleDrawingPane

我确信这会回答 “我希望能够将颜色部署为参数并从另一个类中的另一个方法调用该方法。”

public class TestingX12 {
    public static void main(String args[]) {
        new TestingX12();
    }

    public TestingX12() {
        //create list of circles
        List<MyCircle> circList = new ArrayList<MyCircle>();
        circList.add(new MyCircle(new Rectangle(100, 20, 120, 30), Color.red));
        circList.add(new MyCircle(new Rectangle(150, 50, 80, 50), Color.yellow));
        circList.add(new MyCircle(new Rectangle(30, 90, 30, 110), Color.blue));

        DrawingPane dp = new DrawingPane(circList);
        JFrame frame = new JFrame("JToolTip Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(dp);
        frame.setSize(400, 450);
        frame.setVisible(true);
    }

    class MyCircle {
        Rectangle rectangle;
        Color color;
        public MyCircle(Rectangle r, Color c) {
            this.rectangle = r;
            this.color = c;
        }
    }
    public class DrawingPane extends JPanel {
        List<MyCircle> circles;
        public DrawingPane(List<MyCircle> circles) {
            this.circles = circles;
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Rectangle rect;
            for (int i = 0; i < circles.size(); i++) {
                rect = circles.get(i).rectangle;
                g.setColor(circles.get(i).color);
                g.fillOval(rect.x, rect.y, rect.width, rect.height);
                System.out.println("Drawing...");
            }
        }
    }
}