2014-02-23 27 views
0

我想在我的JFrame上绘制使用paint()的东西。我不能让它显示。为什么?如何在JFrame或任何JComponent上绘图?

claass DrawOn extends JFrame{ 
    public static void main(String args[]){ 
    new DrawOn(); 
    } 

    public DrawOn(){ 
    setVisible(true); 
    pack(); 
    } 

    paint(Graphics g){ 
    g.drawOval(10,10,100,100); 
    } 
} 
+0

可能的重复:http://stackoverflow.com/questions/13404398/using-paintcomponent-to-draw-rectangle-in-jframe – BitNinja

+0

阅读[自定义绘画](http:// docs.oracle.com/javase/tutorial/uiswing/painting/index.html)的工作示例和解释如何绘画的作品。 – camickr

回答

0

你应该画一个JPanel

JPanel panel = new JPanel() 
{ 
    @Override 
    protected void paintComponent(Graphics g) 
    { 
     // TODO Auto-generated method stub 
     super.paintComponent(g); 
     g.drawOval(10, 10, 100, 100); 
    } 
}; 

不要忘记添加JPanelJFrame

add(panel); 

代码:

public DrawOn() 
{ 

    JPanel panel = new JPanel() 
    { 
     @Override 
     protected void paintComponent(Graphics g) 
     { 
      // TODO Auto-generated method stub 
      super.paintComponent(g); 
      g.drawOval(10, 10, 100, 100); 
     } 
    }; 

    add(panel); 
    setPreferredSize(new Dimension(200, 200)); 
    setVisible(true); 
    pack(); 
} 

注意:您可以创建一个类扩展JPanel而不是使用匿名类,以便您的代码更清晰。

+0

请勿使用setPreferredSize()。如Swing教程中所示,重写自定义面板的getPreferredSize()方法。 – camickr

+0

@camickr为什么?你能提供一个指向该部分教程的链接吗? – Christian

+0

不知道本教程,但请参阅[是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是。) –