2012-04-24 5 views
0

Java에서 페인트 프로그램을 작성하는 임무가 있습니다. 나는 무언가를 만들었지 만, 내가 원했던 것은 아니었다.JFrame에서 직접 페인트 할 수 없습니다.

제 문제는 IDE에서 제공하는 옵션에서 IDE (NetBeans 7.0.1)의 JFrame을 생성 할 수없고 페인트 클래스를 올바르게 호출 할 수 없다는 것입니다.

좀 더 구체적으로 한 패널 (예 : Panel1)에서 단추를 누르고 Panel2에서 같은 프레임으로 페인트하고 싶습니다. 클래스의

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    PaintFlower102 f = new PaintFlower102(); 
} 

부 : 클래스의 호출입니다

super("Drag to Paint"); 
    getContentPane().add(new Label ("Click and Drag"),BorderLayout.SOUTH); 
    // add(new JButton("Brush 20"),BorderLayout.NORTH); 
    addMouseMotionListener(new MouseMotionAdapter() { 

     @Override 
     public void mouseDragged(MouseEvent event) { 
      xval=event.getX(); 
      yval=event.getY(); 
      repaint(); 
     } 
    }); 

    setSize(500, 500); 
    setVisible(true); 
    setDefaultCloseOperation(PaintFlower102.DISPOSE_ON_CLOSE); 
} 

public void paint(Graphics g) {  
    g.fillOval(xval, yval, 10, 10); 
} 

문제는 내가 클래스의 extend JFrame을 넣어하지 않는 경우 문제가 해결되지 않는다는 것입니다. 그리고 제가 그렇게한다면, 제가 그릴 수있는 새로운 프레임을 만듭니다.

+0

숙제와 같은 과제 는요? 더 많은 코드를 추가하십시오. 합리적인 조언을하기에는 너무 불충분합니다. –

답변

7

제안 :

  • 이제까지 절대 필요 드문 상황을 제외하고 JFrame의에 직접 페인트하지 마십시오 (이 그들 중 하나가 아닙니다).
  • 대신 JPanel 또는 JComponent 또는 JComponent의 다른 파생물에 페인트합니다.
  • 이 아니라 클래스의 paintComponent(Graphics g) 방법으로 페인트하십시오.
  • 거기에 모두 잘 설명되어있는 Java 자습서를 읽어보십시오. Trail: 2D GraphicsPerforming Custom Painting을 확인하십시오.
+1

+1, 거의 내가 말했을 것입니다! – berry120

+0

답장을 보내 주셔서 감사합니다. 하지만 JFrame에 페인트하지 말고 JPanel에 페인트 할 필요가 없으면 IDE에서 JFrame과 패널을 만들 때 패널에서 페인트 방법을 어떻게 호출할까요? 나는 내 질문을 이해하기를 바랍니다. 예를 들어 버튼을 누른 경우 메서드를 호출하는 eventlistener를 추가해야합니까? – Leonidas

+0

@Leonidas : 페인트 또는 페인트 구성 요소 메소드를 직접 호출하지 마십시오. 대신 메서드 오버라이드를 만들고 호출하려는 경우'repaint()'를 호출하십시오. 또한 IDE에게 수퍼 클래스의 메서드를 재정의하려고한다는 것을 알리는 방법이 있습니다.이 작업을 수행해야합니다. 저 자신, NetBeans를 사용하지 않고 직접 스윙 GUI를 코딩합니다. –

0

내가 잘못 생각할 수도 있지만 super.paintComponent (g)를 포함하고 Hovercraft Full of Eels와 같은 paintComponent 메소드를 재정의해야한다고 생각합니다.

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

    // Draw Oval 
    g.fillOval(xval, yval, 10, 10); 
} 
관련 문제