2011-11-14 93 views
2

我試着讓我的應用程序的外觀看起來是這樣的:我JPanels沒有顯示,因爲我希望他們

How i want my application to look

但是當我嘗試做這個,我得到這樣的: How my application looks

下面是我用它來創建我的兩個JPanels的代碼,我怎麼添加按鈕和洙..

//This is the panel that shows the image 
appletRunningPanel = new ImagePanel(); 
appletRunningPanel.setSize(600, 300); 
appletRunningPanel.validate(); 

//This is the panels that shows the 3 buttons 
appletRunningPanel2 = new Panel(new GridLayout(1, 3)); 
appletRunningPanel2.setSize(600, 300); 
appletRunningPanel2.add(test1); 
appletRunningPanel2.add(test2); 
appletRunningPanel2.add(test3); 
appletRunningPanel2.validate(); 

//Then i add them to the applet with this: 
add(appletRunningPanel); 
add(appletRunningPanel2); 

這裏是ImagePanel

public class ImagePanel extends JPanel{ 

    private BufferedImage image; 

    public ImagePanel() { 
     setSize(600, 300); 
     try {     
      image = ImageIO.read(getClass().getResourceAsStream("/res/TCHLogo.png")); 
     } catch (IOException ex) { 
      // handle exception... 
      System.out.println(ex); 
     } 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, null); 
    } 

} 
+0

1)JButtons被添加到JPanel包含Image ?, 2)也許你想要resiziable你的形象?+1發佈想法 – mKorbel

回答

2

GridLayout將拉伸每個單元格中的組件以適應單元格的大小,如果要避免此拉伸,請將該按鈕添加到另一個面板並將該面板添加到GridLayout。根據我的經驗,在Java中佈置用戶界面完全是關於混合和匹配佈局管理器以實現您的總體目標。有一些簡單的管理者有像Mig Layout

對於你的例子,我會做這樣的事情:

+----------------------------------------+ 
| panel1         | 
|+--------------------------------------+| 
|| panel2        || 
|+--------------------------------------+| 
+----------------------------------------+ 
+----------------------------------------+ 
| panel3         | 
|+-----------++-----------++------------+| 
|| panel4 || panel5 || panel6  || 
|+-----------++-----------++------------+| 
+----------------------------------------+ 
  • panel1BorderLayout
  • panel2是你ImagePanel並通過panel1.add(panel2, BorderLayout.CENTER);加入panel1
  • panel3是你的GridLayout
  • panel4panel5panel6都是默認的(FlowLayout),並且這些JPanel中的每一個都將包含您的三個按鈕之一。

然後,您可以通過設置它的佈局,以BorderLayout並通過getContentPane().add(panel3, BorderLayout.SOUTH);

它並不完美通過getContentPane().add(panel1, BorderLayout.NORTH);panel3添加panel1內容添加到內容窗格中,但它會爲您實現更簡潔的外觀。還有很多東西可以添加來讓事情看起來更好。我最喜歡的佈局管理器之一是BoxLayout

+0

您不需要創建6個不同的面板。只有兩個會做。首先創建圖像面板,然後創建一個按鈕面板。這只是令人困惑的事情。 – Qwerky

0

嘗試代碼中添加一箇中間的JPanel 即

JPanel appletRunningPanel2Wrapper = new JPanel(); 
appletRunningPanel2Wrapper.add(appletRunningPanel2); 
add(appletRunningPanel2Wrapper); 
1

你需要更好地理解佈局管理器。看看this handy guide並選擇適合您需求的佈局管理器。

在底部面板上,GridLayout不考慮組件的首選大小(JButtons),它使用網格部分中的所有可用空間。

您可能需要爲每個面板使用不同的佈局管理器,並且爲您的小應用程序框架再次使用不同的佈局管理器。

相關問題