2011-11-10 2 views
-2
import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.BorderFactory; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseMotionListener; 
import java.awt.event.MouseMotionAdapter; 
import java.awt.geom.*; 
import java.util.*; 

public class test1 extends JFrame implements MouseListener { 
    private JPanel JP = new JPanel(); 

    public test1() { 
     JP.setBorder(BorderFactory.createLineBorder(Color.black)); 
     JP.addMouseListener(this); 
     this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); 
     this.add(JP); 
     this.pack(); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        test1 frame = new test1(); 
        frame.setSize(400,400); 
        frame.setVisible(true); 
       } 
     }); 
    } 

    public void mouseClicked(MouseEvent e) { 
     //drawCircle(e.getX(), e.getY()); 
     //repaint(); 
     ballball ball; 
     ball = new ballball(); 
     //ball.paintComponent(Graphics g); 
     System.out.println("ballball"); 

    } 

    public void mouseExited(MouseEvent e) { 

    } 

    public void mousePressed(MouseEvent e) { 
     //this.mouseX=e.getX(); 
     //this.mouseY=e.getY(); 
    } 

    public void mouseReleased(MouseEvent e) { 

    } 

    public void mouseEntered(MouseEvent e) { 

    }  
} 

class ballball extends test1 implements Runnable { 

    private int squareX = 50; 
    private int squareY = 50; 
    private int squareW = 100; 
    private int squareH = 100; 
    public boolean draw; 

    private Vector<Object> v = new Vector<Object>(); 

    public ballball() { 

     /*addMouseListener(new MouseAdapter() { 

      public void mousePressed(MouseEvent e) { 
       draw = true; 
       //Thread thread1 = new Thread(this.moveSquare(50, 50)); 
       repaint(); 
       //moveSquare(e.getX(),e.getY()); 
      } 
     });*/ 


     /*addMouseMotionListener(new MouseAdapter() { 
      public void mouseDragged(MouseEvent e) { 
       moveSquare(e.getX(),e.getY()); 
      } 
     });*/ 
     System.out.println("ball created"); 
     this.repaint(); 

    } 

    public void run() { 

    } 

    private void moveSquare(int x, int y) { 
     int OFFSET = 1; 
     if ((squareX!=x) || (squareY!=y)) { 
      repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); 
      squareX=x; 
      squareY=y; 
      repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); 
     } 
    } 

    public void paint(Graphics g) { 
     g.drawString("abcasdfasffasfas", 10, 10); 
    } 

    //@Override 
    public void paintComponent(Graphics g) { 
     //if (draw) { 
     // existing code 
     System.out.println("paint"); 
     //super.paintComponent(g);  

     //g.drawString("This is my custom Panel!",10,20); 
     //g.setColor(Color.RED); 
     //g.fillRect(squareX,squareY,squareW,squareH); 
     //g.setColor(Color.BLACK); 
     //g.drawRect(squareX,squareY,squareW,squareH); 
     Shape circle = new Ellipse2D.Float(squareX,squareY,100f,100f); 
     Graphics2D ga = (Graphics2D)g; 
     ga.draw(circle); 
     //} 
    } 
} 
프로그램의 목적은 원을 만들기 위해 클릭하는 것입니다

에서 실행하지의 ballball 클래스는 TEST1를 확장 TEST1은 마우스 클릭을 감지는 ballball 객체 만들어진. 그러나 paint/paintComponent 메소드는 절대로 실행되지 않습니다. 내 프로그램 구조에서 JPanel 수퍼 클래스에 원을 그릴 수 있습니까?가의 paintComponent()가 JFrame의

+3

왜 @ 오버라이드를 주석 처리 했습니까? 컴파일러가 그것을 사용하면 불평합니까? – aioobe

+0

add : 메서드가 슈퍼 유형의 메서드를 재정의하거나 구현하지 않는 경우 – hkguile

+1

Swing이 메서드를 호출 할 수 없다는 것이 확실하지 않습니까? 만약 당신이 마술처럼 자신 만의 방법을 만들었다면, 스윙이 어떻게 그것에 대해 알고 그것을 불러야할까요? – aioobe

답변

12

JFrameJComponent이 아니며이를 재정의 할 수있는 paintComponent 메서드가 없습니다. 대신 JPanel을 확장하여 프레임에 추가 할 수 있습니다.

+0

올바른 제안 +1 – mKorbel

+0

페인트()에 대해 어떻습니까? 또한 실행할 수 없습니다. – hkguile

+0

paint()가 사용되지 않습니다. JComponent와 함께 paintComponent (Graphics g)를 사용합니다. – Hidde