JPanel рисунок с определенным цветом - PullRequest
1 голос
/ 18 октября 2011

Я нашел этот класс, который рисует круги разных цветов. Цвет каждого круга определяется в соответствии с определенным порядком цветов, который повторяется по мере того, как он подходит к концу (используя все цвета по одному). Я хочу изменить это так, чтобы дать мне возможность индивидуально определять цвет (на 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 ]

3 голосов
/ 18 октября 2011

Ваш DrawingPane, кажется, имеет список Rectangle с именем circles (sic). Я не знаю, является ли Rectangle одним из ваших классов или стандартом java.awt.Rectangle.

Если это один из ваших классов, просто добавьте атрибут color к этому классу и получите этот атрибут из него во время итерации.

Если это стандарт java.awt.Rectangle, то введите класс Circle, содержащий прямоугольник и цвет, и используйте список Circle вместо списка Rectangle.

2 голосов
/ 18 октября 2011

Вы ищете это?

Вы можете объявить классы MyCircle и DrawingPane в отдельных файлах .Java.

Я уверен, что это даст ответ на "Я хочу иметь возможность развернуть цвет в качестве параметра и вызвать метод из другого метода в другом классе."

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...");
            }
        }
    }
}
2 голосов
/ 18 октября 2011

Я хочу иметь возможность развертывать цвет в качестве параметра и вызывать метод из другого метода в другом классе

Затем необходимо сохранить цвет и форму в качестве свойствпользовательский класс.

Пользовательские подходы к рисованию показывает пример того, как это сделать.Я бы использовал пример DrawOnComponent в качестве отправной точки.Ваш код будет намного проще, так как вам не нужно обрабатывать перетаскивание.Все, что вам нужно сделать, это создать метод addCircle (...), который будет принимать размер / местоположение / цвет круга в качестве параметров.

2 голосов
/ 18 октября 2011

Я не уверен, что вы имеете в виду, но если вы пытаетесь установить цвета окружности из внешнего класса, то сделайте массив свойством класса с помощью установщика и (при необходимости) получателя:

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);
           }
        }
    }
}
...