다음 문제를 해결하려고합니다. 올림픽 링을 표시하는 프로그램을 작성하십시오. 올림픽 색상의 반지를 색칠하십시오. 주어진 위치와 색상의 링을 그리는 메소드 drawRing을 제공하십시오.그리는 사용자 정의 메서드 만들기 - 그래픽 2D g2가 null
나는 내 이해의 주요 문제를 겪고 방법을 정확하게 타입의 그래픽 작업의 대상. 처음에는 getGraphics()
을 사용하여 메서드에 매개 변수로 전달했지만 null 예외가 발생할 가능성이 있으므로이 메서드는 일반적으로 피하는 방법을 배웠습니다. 그래서 당신은 구성 요소 클래스에서 paintComponent
메서드를 재정의해야한다는 것을 알았습니까? 그래서 내가 오버라이드 및 내 drawRing
메서드를 포함하는 클래스를 만들어이 시도했다 그러나 Graphics2D g2 인스턴스 변수를 만들었지 만 나는 한 번 후에 그것은 drawRing
첫 번째 줄에서 호출 된 Null 오류가 점점. 나는 몇 시간 동안 무언가를 알아 내려고 노력해 왔지만,이 문제를 접근하여 메인에있는 프레임에 접근 할 수있는 방법을 확실히 알지 못했다. 어떤 도움이라도 대단히 감사합니다.
또한, 난 그냥 X를 차지 내가 시작하지 않은 점에 유의하고자, y는 내 drawRing
방법의 색상뿐만 아니라 좌표, 내가 먼저 프로그램이 방법을 액세스하여 그 수 있는지 확인하려면 처음에 메인 프레임에서 그려진 프레임을 그릴 수 있습니다. 그 후 세부 사항은 상당히 간단 할 것입니다.
내 코드 : 물론
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
public class test{
public static class ringComponent extends JComponent{
private Graphics2D g2;
public void paintComponent(Graphics g){
g2 = (Graphics2D) g;
}
public void drawRing(){
g2.setColor(Color.RED);//Null error here
Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 200, 200);
g2.draw(circle);
}
}
public static void main(String[] args){
JFrame frame = new JFrame();
final int FRAME_WIDTH = 800;
final int FRAME_HEIGHT = 800;
frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
frame.setTitle("Olympic Rings");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ringComponent rc = new ringComponent();
rc.drawRing();
frame.add(rc);
frame.setVisible(true);
}
}
실제로이 방법을 사용하여 그리는 방법을 배웠지 만, paintComponent의 매개 변수를 변경할 수 없기 때문에 처음부터 내 문제의 원인 인 매개 변수로 좌표와 문자열을 취할 수있는 별도의 메서드를 만들 수 없습니다. – Reddy
'좌표와 문자열을 매개 변수로 취할 수있는 별도의 메서드를 만들 수 없습니다. '- 할 수 있습니다. 페인팅을 사용자 정의하려는 모든 메소드를 클래스에 추가 할 수 있습니다. 그것이 스윙 구성 요소가 작동하는 방법입니다. setText(), setForeground(), setBackground()와 같은 메서드는 모두 구성 요소가 그려지는 방식에 영향을줍니다. 특별한 페인팅 요구 사항이있는 경우이 값을 변경할 수있는 적절한 "setter"메서드를 만듭니다. 그런 다음 setter 메서드에서'repaint()'를 호출하면 구성 요소가 다시 그려집니다. – camickr
그래서 클래스 내에서 직접 메서드를 만들 수 있다면 어떻게 그렇게 할 것입니까? 내가 paintComponent 메서드 내에서 메서드를 선언하면 표현식 오류가 잘못 시작되고 바깥 쪽을 선언하면 정확히 무엇이 작동하지 않았던 지 알 수 있습니다. – Reddy