2012-05-07 60 views
4

我在將圖形添加到JPanel時遇到問題。如果我從panel.add(new graphics())更改該行; frame.add(new graphics());並且不要將JPanel添加到JFrame中,黑色矩形將出現在JFrame上。我只是不能讓黑色的矩形出現在JPannel上,並想知道是否有人可以幫助我。如何在JPanel上放置圖形?

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

public class Catch{ 

public class graphics extends JComponent{ 
    public void paintComponent(Graphics g){ 
    super.paintComponents(g); 
    g.fillRect(200, 62, 30, 10); 
    } 
} 

public void createGUI(){ 
    final JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 
    frame.setSize(500,500); 
    frame.addMouseListener(new MouseAdapter(){ 
     public void mouseClicked(MouseEvent e) { 
      System.out.println(e.getPoint().getX()); 
      System.out.println(e.getPoint().getY()); 
     } 
    }); 
    panel.add(new graphics()); 
    frame.add(panel); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(frame.DISPOSE_ON_CLOSE); 
} 

public static void main(String[] args){ 
    Catch GUI= new Catch(); 
    GUI.createGUI(); 
    } 
} 
+0

'圖形'不是被添加到GUI元素的東西。基本上,擴展'JComponent'的每個組件都有一個'paint()'方法,該方法會自動傳遞到'Graphics g'對象中。然後引用該對象在當前元素上繪製圖形。查看['paint()'doc](http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/JComponent.html#paint(java.awt.Graphics))for更多。 – Jon

+0

我試圖看看,但我仍然有點困惑。你認爲你可以給我一個例子嗎?我對於如何將其直接添加到框架,但不是面板,也有點困惑。 – dannyn382

+0

'圖形'和'圖形'是不同的類,@Jon提到的只是部分應用。你嘗試過設置佈局管理器嗎? –

回答

7

自定義組件是0x0 px。

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

public class Catch { 

    public class MyGraphics extends JComponent { 

     private static final long serialVersionUID = 1L; 

     MyGraphics() { 
      setPreferredSize(new Dimension(500, 100)); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.fillRect(200, 62, 30, 10); 
     } 
    } 

    public void createGUI() { 
     final JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     panel.add(new MyGraphics()); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       Catch GUI = new Catch(); 
       GUI.createGUI(); 
      } 
     }); 
    } 
} 
+0

哇!非常感謝你的幫助!! – dannyn382

1

下面是一些你可以看看:

import javax.swing.*; 
import java.awt.*; 
public class GraphicsOnJPanel extends JFrame 
{ 
    public GraphicsOnJPanel() 
    { 
     setSize (Toolkit.getDefaultToolkit().getScreenSize()); 
     setResizable (false); 
     setContentPane (new JPanel() 
     { 
      public void paint (Graphics g) 
      { 
       g.setColor (Color.RED); 
       g.fillRect (100, 100, 100, 100); 
      } 
     } 
    ); 
      setVisible (true); 
} 


    public static void main (String args[]) 
    { 
     new GraphicsOnJPanel(); 
    } 
} 

也許這是有用的?