2011-11-10 35 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

你爲什麼評論@Override?如果你使用它,編譯器會抱怨嗎? – aioobe

+0

如果add:方法不會覆蓋或實現超類型的方法 – hkguile

+1

那麼這不是很明顯,那Swing不能調用你的方法嗎?如果你只是神奇地構建了你自己的方法,那麼Swing應該如何知道它,並且稱之爲? – aioobe

回答

12

JFrame不是JComponent,它沒有可以覆蓋的paintComponent方法。相反,您可以擴展JPanel並將其添加到框架中。

+0

正確的建議+1 – mKorbel

+0

油漆()怎麼樣?也不能執行 – hkguile

+0

paint()已被棄用。使用paintComponent(Graphics g)和任何JComponent。 – Hidde

相關問題