2013-01-04 1 views
-4

내 JApplet에 요점을 추가하려고하고 있으며 Google과 Yahoo에서 아무런 답변도 얻지 못하고 있습니다. 나는JApplet에 포인트를 어떻게 추가합니까?

public class Chaos 
{ 
    Point p = new Point(75, 25); 
    public void frame() 
    { 
    JApplet applet = new JApplet 
    applet.add(p); //error on this line 
    } 
} 

이클립스는 형 컨테이너에 메소드 추가 (구성 요소)이 일부에 명백한 질문처럼 보일 수있는 인수 (포인트) 적용되지 않습니다 "라고, 나는 자바에 비교적 새로운 오전 할 때마다/

+1

"JApplet에 포인트 추가"란 무엇을 의미합니까? 애플릿이 Point 객체로 무엇을 할 것이기 때문에 아무 의미가 없습니까? JApplet에 컴포넌트를 추가 할 수는 있지만, 매우 이상한 요청으로 무엇을 달성하려고 하는가? –

+0

''Point'' 클래스가''Component'' 클래스의 하위 클래스가 아니기 때문에 이클립스가 옳다. –

+1

'JApplet applet = new JApplet' 애플릿을 만드는 방법이 아니다. 그것이 컴파일되지 않습니다. 이것은'JApplet applet = new JApplet();'을 컴파일 할 수 있습니다 (그러나 아직도 애플릿을 만드는 올바른 방법은 아닙니다). –

답변

3

몇 가지 기본 규칙 :

  • 합법적 변수에 호출 할 수있는 유일한 방법은 변수에 가능한 방법입니다 같은 JApplets, 이러한 방법 A와 핵심 Java 클래스에 대해서는
  • . Java API에서 잘 정의되어 있습니다.
  • JApplet과 API의 모든 상위 클래스를 살펴보면 Point 매개 변수를 사용하는 추가 메소드 인 add(Point p)이 없으므로 컴파일러가 불평하는 것이 옳다는 것을 알 수 있습니다.
  • 이 질문에 대한 귀하의 주요 문제는 귀하가 우리에게 문제를 말해 주지만 귀하가 해결하고자하는 것을 저희에게 알려주지 않는다는 것입니다. 위에서 언급 한 것처럼 JApplet에 Point를 추가하는 것은 논리적이지 않습니다. 애플릿이이 Point로 무엇을 원하는가? 변경 위치는 무엇입니까? 그 창문에 자리를 그 으라? 이러한 세부 정보를 통해 가능한 솔루션을 변경할 수 있습니다. 우리가 알기 전까지는이 게시물에 나와있는 것과 같은 일반적인 규칙을 말할 수 있습니다.
  • 목표가 JApplet을 그리는 것이라면 JPanel의 paintComponent(...) 메소드에서 그림을 만든 다음 JPanel을 JApplet의 contentPane으로 만듭니다. 이를 수행하는 방법을 보여줄 몇 가지 훌륭한 튜토리얼이 있습니다.
  • 다른 포스터에서 제안한대로 애플릿을 사용하거나 paint(...)으로 직접 그려서는 안됩니다. 애니메이션을 수행하려는 경우 자동 이중 버퍼링을 비롯하여 스윙 그래픽의 모든 이점을 잃어 버리게됩니다.
  • Andrew Thompson에 따르면 Swing Graphics는 키 바인딩, 테이블, 트리 및 서식있는 텍스트 구성 요소, PLAF, 몇 가지 레이아웃,이 천년기를 사용한 사람들에게 액세스 할 수도 있습니다.
  • 다음은 JApplet에 : example
+1

* "자동 이중 버퍼링을 포함한 Swing 그래픽의 모든 이점을 잃습니다."* .key 바인딩, 테이블, 트리 및 서식있는 텍스트 구성 요소, PLAF, 몇 가지 레이아웃,이 천년기를 사용한 사람들에 대한 액세스. –

0

만 (당신이 JApplet를 사용하는 경우 JComponent 파생 된 인스턴스를 추가하는 것은 바람직하지만)는 JAppletComponent 파생 클래스의 intances를 추가 할 수 있기 때문이다. 데이터 유형 (add 메소드의 예상 유형 및 매개 변수로 전달하는 변수 유형)이 일치하지 않으므로 Eclipse가 의미 론적 오류를 코드에 지정하고 있습니다. 당신이 애플릿에서 점을 그리려는 경우

, 당신은 당신의 코드에서 애플릿의 paint 방법을 무시하고 줄을 하나 개의 긴 픽셀 (또는 픽셀 크기의 구형 영역)을 그릴 수 있습니다.이런 식으로 뭔가 :

당신이 당신의 캔버스에 몇 가지 포인트를 추가 목록에 저장 한 다음, 다음 반복하고 위의 paint 방법 다음 그릴 계획하는 경우
import java.awt.*; 
import javax.swing.JApplet; 

public class test extends JApplet { 
    @Override 
    public void paint(Graphics g) { 
     int x = 75; 
     int y = 75; 
     g.fillRect(x, y, 1, 1); 
    } 
} 

:

public class test extends JApplet { 
    private List<Point2D> points; 

    @Override 
    public void init() { 
     points = new ArrayList<Point2D>(); 
     points.add(new Point2D.Double(75.0, 75.0)); 
    }; 

    @Override 
    public void paint(Graphics g) { 
     g.setColor(Color.BLUE); 
     for (Point2D p : points) { 
      int x = (int) p.getX(); 
      int y = (int) p.getY(); 
      g.fillRect(x, y, 1, 1); 
     } 
    } 
} 

하는 경우 귀하의 포인트를 Component s로 처리하고 싶다면 JPanel과 같은 기존 클래스 (JComponent) 중 하나에서 파생 된 사용자 정의 Point 클래스를 만들 수 있습니다. 그러나 이것은 더 복잡합니다.

+2

AWT 컴포넌트를 사용하도록 제안하지 마십시오. 왜 누군가가 덜 강력한 GUI 라이브러리를 사용하도록 제안합니까? 스윙보다 오래된 GUI 라이브러리를 배우는 것 이외에 얻을 수있는 이점은 무엇입니까? –

+0

AWT 용 Swing API를 대체 할 것을 제안하지는 않았지만 관찰 결과는 유효하지만 간단하게 캔버스를 사용하기 위해 간단한 테스트 드로잉 (내가 수행하려고 시도한 것)을 제안 했으므로 그림. 오해를 피하기 위해 그 제안을 삭제하는 답변을 업데이트했습니다. – higuaro