Как вы используете графику «г»? - PullRequest
0 голосов
/ 04 сентября 2018

Я в классе для начинающих, который преподает Java, и в нашем чтении они привели пример использования графики для рисования предметов. Итак, я разместил код в своей IDE и опробовал его.

Код, который они разместили, должен был создать инопланетное лицо и

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import javax.swing.JComponent;

/*
   A component that draws an alien face
*/
public class FaceComponent extends JComponent
{  
   public void paintComponent(Graphics g)
   {  
      // Recover Graphics2D 
      Graphics2D g2 = (Graphics2D) g;

      // Draw the head
      Ellipse2D.Double head = new Ellipse2D.Double(5, 10, 100, 150);
      g2.draw(head);

      // Draw the eyes
      g2.setColor(Color.GREEN);
      Rectangle eye = new Rectangle(25, 70, 15, 15);
      g2.fill(eye);
      eye.translate(50, 0);
      g2.fill(eye);

      // Draw the mouth
      Line2D.Double mouth = new Line2D.Double(30, 110, 80, 110);
      g2.setColor(Color.RED);
      g2.draw(mouth);

      // Draw the greeting
      g2.setColor(Color.BLUE);
      g2.drawString("Hello, World!", 5, 175);
   }
}

Однако я не уверен, как вы создаете графику, для которой вы вызываете функцию. Я предполагал, что вы будете использовать

Graphics g = new Graphics();

Например, как вы называете новый класс, но это оказалось ошибкой. Я пытался заглянуть в документацию, но, похоже, она затуманивает то, что вы используете для «g».

Пожалуйста, помогите мне понять.

Или это ситуация, когда этот класс мне нужно вызывать из другого класса, так как я его расширяю?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Не создавайте Graphics g с новым оператором. Он передается через метод public void paintComponent(Graphics g).

Обратите внимание, что Java фактически передает объект Graphics2D, хотя этот интерфейс (что делает возможным приведение типов), но по старым причинам сохранил интерфейс Graphics, заставив объект Graphics2D наследовать от Graphics.

Причина, по которой вы не создаете новый объект Graphics, заключается в том, что переданный объект Graphics - это тот, который используется остальными вашими виджетами и интерфейсом AWT / Swing в целом.

Что касается "использования", то это стандартный объект Java. Используйте его как объект Java, вызывая методы для него.

g.setColor(...);

ЭСТ.

0 голосов
/ 04 сентября 2018

paintComponent(Graphics g) - это метод, унаследованный от JComponent (обратите внимание, что paintComponent должен иметь аннотацию @Override), он является частью системы рисования GUI. Он вызывается из Java Swing Framework, чтобы попросить компонент нарисовать себя на экране. Объект, прошедший к методу, уже создан и пригоден для использования.

Вы должны добавить свой компонент на экран с помощью JFrame / JPanel и сделать его видимым, чтобы он работал.

Кроме того, поскольку вы не реализуете измеримый экран, вам нужно добавить к нему некоторое пространство внутри макета, чтобы увидеть результат (setMinimumSize () после инициации, перед frame.pack ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...