Пользовательская форма в Java - PullRequest
0 голосов
/ 03 марта 2012

То, чего я хочу достичь, это что-то вроде этого:

 public void paint(Graphics g) {
    Graphics2D ga = (Graphics2D) g;      
    MyShape c = new MyShape();
    ga.draw(c);
}

Я хочу, чтобы класс MyShape содержал информацию, необходимую для рисования круга с числом внутри него.

Итак, я думаю, мне нужно создать какой-то контейнер / компонент, нарисовать внутри него то, что мне нужно (кружок и число), а затем передать его дальше методу, который я вставил выше.

Проблема в том, что я не знаю, какой класс расширить ... и остальную часть истории.

Ответы [ 3 ]

3 голосов
/ 03 марта 2012

Форма - это просто форма.Круг - это форма.Прямоугольник - это форма.Но круг с числом внутри это не форма.Я думаю, что вы на самом деле хотите что-то вроде этого:

public class CircleWithNumberInside extends JComponent {
    @Override
    protected void paintComponent(Graphics g) {
        // TODO draw a circle, and draw a number inside it.
    }
}
3 голосов
/ 03 марта 2012

Конечно, вы можете реализовать интерфейс Shape самостоятельно, но нет необходимости использовать существующий подкласс, такой как Ellipse2D. Просто создайте его с одинаковыми значениями для width и height. Вот пример здесь , который показывает, как центрировать произвольный глиф в Ellipse2D.Double.

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

Вы должны расширить класс Shape, который внутри вас должен был бы переопределить paintComponent, чтобы объект Graphics2D знал, что рисовать.

...