2013-05-30 3 views
1
public class Points extends JPanel { 

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

    Graphics2D g2d = (Graphics2D) g; 

    g2d.drawLine(60, 20, 80, 90); 
} 
} 

Я не совсем уверен, что должен делать Graphics2D g2d = (Graphics2D) g;.Java - Swing - графика 2D

Это просто простой JPanel, который позже добавлен в JFrame.

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

ответ

1

Заявление

Graphics2D g2d = (Graphics2D) g; 

просто бросает Graphics объект в Graphics2D. Он используется для доступа к методам, предоставленным Graphics2D. В этом случае нет необходимости в Graphics также есть метод drawLine так что если вы не имеете требование для более продвинутых методов, таких как rotate и translate, вы можете использовать

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawLine(60, 20, 80, 90); 
} 
+0

Я не знал, что вы можете сделать это с объектами вообще. Im довольно новичок в программировании, и когда я изучил некоторые основы, я просто перешел в кодировку, так что многие из вещей, которые я пропустил в учебнике – user2347921

+0

И последнее, вы можете бросить объект только в подкласс , правильно ? – user2347921

+0

Не только для подкласса. В этом случае «Graphics2D» является подклассом «Graphics», поэтому вы производите или более правильно опускаете ссылку 'g'.Но в целом, если какой-либо объект реализует интерфейс, вы также можете использовать его для этого интерфейса. Вы можете использовать, если объект ** - это тип ** другого объекта. – Reimeus

1

Это проблема совместимости со старым кодом Java.

Graphics2D, как описано в документации, это класс, который наследует от Graphics и предоставляет некоторые дополнительные графические возможности: короче Graphics2D является более мощным Graphics.

Теперь метод paintComponent(Graphics g) существует еще до Graphics2D, так что даже если с текущей Java Графического, который находится под капотом JPanel является Graphics2D, подпись не была изменена, чтобы сломать существующий код.

Во время выполнения g прошло Graphics2D, но вам необходимо отдать его, чтобы вам разрешили использовать более сложные операции над ним.

0

Он бросает графический контекст в Graphics2D объект. Это полезно, потому что Graphics2D допускает вращения, преобразования, сглаживание и т. Д. Невозможно с обычным объектом Graphics. Все методы, доступные в Graphics, по-прежнему доступны вам, когда вы используете Graphics2D.

0

Вы вводите g в качестве Graphics2D, чтобы получить расширенную функциональность в классе Graphics2D.

0

Это просто отличает объект Graphics в объект Graphics2D. Graphics2D имеет множество функций, которые Graphics не предоставляет, которые очень полезны для рисования 2D-графики. Проверьте документацию для Graphics2D здесь:

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

Кроме того, в соответствии с this other question, что бросок должен быть всегда безопасно.

Смежные вопросы