2013-05-17 43 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)