Java GUI.Эллипс вместо прямоугольника - PullRequest
0 голосов
/ 20 марта 2012

У меня есть следующий код, частично взятый из реализации Red Black Tree Java. Это часть графического интерфейса. Я очень плохо разбираюсь в Java Graphics, и я надеялся получить помощь по этому вопросу.

  public void paintComponent(final Graphics g) {
        super.paintComponent(g);

        if (tree == null) {
            return;
        }

        tree.traverseInorder(new Inter.Visitor() {
            private int x = gridwidth;
            public void visit(LBTN node) {
                coordinates.put(node, new Point(x, gridheight * (depth(node)+1)));
                x += gridwidth;
            }
        });

        tree.traversePostorder(new Inter.Visitor() {
            public void visit(LBTN node) {
                String data = node.getinfo().toString();
                Point center = (Point)coordinates.get(node);
                if (node.getParent() != null) {
                    Point parentPoint = (Point)coordinates.get(node.getParent());
                    g.setColor(Color.black);
                    g.drawLine(center.x, center.y, parentPoint.x, parentPoint.y);
                }
                FontMetrics fm = g.getFontMetrics();
               Rectangle r = fm.getStringBounds(data, g).getBounds();

                r.setLocation(center.x - r.width/2, center.y - r.height/2);
                Color color = getNodeColor(node);
                Color textColor =
                    (color.getRed() + color.getBlue() + color.getGreen() < 382)
                    ? Color.white
                    : Color.black;
                g.setColor(color);
                g.fillRect(r.x - 2 , r.y - 2, r.width + 4, r.height + 4);
                g.setColor(textColor);
                g.drawString(data, r.x, r.y + r.height);
            }
        });
    }

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

Любая помощь будет высоко ценится. Привет

1 Ответ

0 голосов
/ 20 марта 2012

Я думаю, что замена этого,

g.fillRect(r.x - 2 , r.y - 2, r.width + 4, r.height + 4);

на это,

g.fillOval(r.x - 2 , r.y - 2, r.width + 4, r.height + 4);

должна работать.

http://docs.oracle.com/javase/6/docs/api/java/awt/Graphics.html#fillOval%28int,%20int,%20int,%20int%29

...