2013-05-17 41 views
0

我不明白为什么我的代码不能正常工作,试图在我的JFrame中打印一个矩形,但总是在f.add(p);上出错。错误java JFrame

import javax.swing.*; 
import java.awt.*; 

public class SPEL{ 

    public void paintComponent(Graphics g){ 
     g.drawRect(50,75,100,50); 
    } 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 

     f.setSize(400, 300); 
     f.setLocation(100,100); 
     f.setTitle("SPEL"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     SPEL p = new SPEL(); 
     f.add(p);//error 
     f.setVisible(true); 
    } 
} 
+1

* “错误” *始终复制/粘贴错误和异常输出。 –

+4

SPEL类不是Java Swing组件,因此无法将其添加到JFrame中。 –

+0

提示:添加@GilbertLeBlanc(或者,@,@是重要的)以通知他们新的评论。 –

回答

3

你忘了extends的东西,例如:

public class SPEL extends JPanel { 

您可以添加@Override来减少这种错误的机会

@Override 
public void paintComponent(Graphics g){ 
+1

和super.paintComponent(g)在EDT – MadProgrammer

+0

'@ Override'中启动用户界面现在,这是一个+1 –

+0

*“,但是如何将”g.drawRect“添加到jframe”*而不是绘制到顶部通常最好涂上一个“JPanel”。所以坚持在答案中陈述的方式,让类'扩展JPanel'。感谢, –

1

试试这个! :

import javax.swing.*; 
import java.awt.*; 

@SuppressWarnings("serial") 
public class SPEL extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setPaint(Color.red); 
     Rectangle b = new Rectangle(50, 75, 100, 50); 
     g2d.draw(b); 
     g2d.fill(b); 
    } 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 

     f.setSize(400, 300); 
     f.setLocation(100, 100); 
     f.setTitle("SPEL"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     SPEL p = new SPEL(); 
     f.add(p); 
     f.setVisible(true); 
    } 
} 
  • extends JPanle
  • @Override
  • Using Graphics2D
  • g2d.fill(Shape s)