2013-04-04 113 views
0

一直在尋找如何我可以在contentpane /背景圖像的基礎上添加對象。基本上我必須創建一個棋盤遊戲,我的任務是製作GUI。我需要製作一箇中心位置來放置我的作品,然後才能將這些作品移動到這些位置。截至目前,我只是擁有了我的主板的背景圖片,並希望添加組件以使其具有交互性,但我似乎無法將互動組件疊加在我的背景圖片上。在背景圖片上添加JPanel /容器/圖片/ JButtons /等等?

這裏是我的代碼:

public class Lotus{ 

    private static JPanel _panel = new JPanel(); 
    private static JFrame _frame = new JFrame("Lotus"); 
    private static Container _pieces = new Container(); 

    public static void main(String[] args){ 
     /** 

     JLabel A = new JLabel(""); 
     A.setOpaque(true); 
     A.setBackground(Color.BLACK); 
     _frame.add(_pieces); 
     _pieces.add(A); 
     _frame.setAlwaysOnTop(_pieces); 
       */ 

     try{ 

      _frame.setContentPane(new JLabel(new ImageIcon(
       ImageIO.read(new File("C:\\Users\\Martin\\Pictures\\pic625580.jpg"))))); 

     }catch(IOException e){ 

      System.out.println("Image is not Found."); 
      e.printStackTrace(); 
     } 

     Toolkit tk = Toolkit.getDefaultToolkit(); 
     int xSize = ((int)tk.getScreenSize().getWidth()); 
     int ySize = ((int)tk.getScreenSize().getHeight()); 
     _frame.setSize(xSize,ySize); 
     Container contentPane = _frame.getContentPane(); 
     contentPane.setLayout(null); 
     _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //_frame.pack(); 
     _frame.setVisible(true); 

     /** 
     JLayeredPane mainLayer = new JLayeredPane(); 
     _frame.add(mainLayer, BorderLayout.CENTER); 
     JLabel label = new JLabel("LABEL", JLabel.CENTER); 
     label.setBounds(100,100,200,100); 
     label.setOpaque(false); 
     _frame.getContentPane().setComponentZOrder(label, 0); 
     //label.setVisible(true); 
     label.setBackground(Color.CYAN); 
     mainLayer.add(label,1); 
     mainLayer.moveToFront(_frame); 
     */  
    } 

編輯:

好了,所以我想下面還的辦法,我的JFrame現在沒有顯示出來,並尋找Java控制檯因某種原因被終止程序。代碼:

public static void main(String[] args){ 

    class Board extends JPanel{ 

     JFrame _frame = new JFrame("Lotus"); 

     Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Martin\\Pictures\\pic625580.jpg"); 

     public void paintComponent(Graphics g) { 

      JLabel A = new JLabel(""); 
      A.setOpaque(true); 
      A.setBackground(Color.BLACK); 

      Board b = new Board(); 
      _frame.setContentPane(b); 
      _frame.setVisible(true); 
      _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      super.paintComponent(g); 
      g.drawImage(image,0,0,A); 
      g.fillOval(50,50,5,5); 

    } 
     public Dimension getPreferredSize() { 

      return new Dimension(300,300); 


    } 
+0

paintComponent()僅用於繪畫。你不會在paintComponent()方法中創建組件,並且你絕對不會在那裏創建JFrame。閱讀Swing教程以獲得如何構建程序的示例。此外,請遵循標準的Java命名約定。變量不以大寫字符開始。 – camickr 2013-04-04 23:41:26

+0

欣賞它謝謝你。 – SuperNova 2013-04-05 01:55:13

回答

2

你必須繼承JPanel覆蓋paintComponent做繪圖的東西。例如:

public class Board extends JPanel { 

    Image image = ... // load it here 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); // fatal 

     g.drawImage(image,0,0,this); // omitted label 

     g.fillOval(50,50,5,5) // circle 5x5 at pixel 50x50 

     // etc. 
    } 
} 

現在你也應該覆蓋getPreferredSize,告訴佈局管理董事會應該多大:

public Dimension getPreferredSize() { 
     return new Dimension(300,300) // your required size... 
    } 

然後設置Board爲內容窗格。

+0

請原諒我的無知,因爲我是一個noob,但是,我如何將board設置爲contentpane? – SuperNova 2013-04-04 19:34:53

+0

'frame.setContentPane(new Board());' – Mordechai 2013-04-04 19:38:42

+0

或'Board b = new Board(); frame.setContentPane(b)中;' – Mordechai 2013-04-04 19:39:14