2012-04-12 45 views
1

我有兩個JPanel的(JpanelLeftJpanelLeftContent)我怎樣才能使JpanelLeftContent填寫家長的大小與左邊的右邊一點餘量。我嘗試過不同的佈局,並嘗試修改hgap和vgap值,但沒有一個給我一個好的結果。設置JPanel的大小來填充父很少保證金

JPanel JpanelLeft = new JPanel(); 
    JPanel JpanelLeftContent = new JPanel(); 
    JpanelLeft.add(JpanelLeftContent); 

如果可能的話我怎麼可以讓JpanelLeftContent看起來像一個圓角矩形如圖片所示。

enter image description here

+1

http://stackoverflow.com/questions/3056089/how-to-create -a-rounded-title-border-in-java-swing或http://www.javafaq.nu/java-example-code-800.html – StanislavL 2012-04-12 11:40:36

+1

什麼是你的JRE版本,在1.7中你可以通過構建函數中(圓角矩形)? – 2012-04-12 13:42:37

+1

下面是我忘記添加的鏈接[Rounded Rectangle]之前(http://docs.oracle.com/javase/7/docs/api/javax/swing/BorderFactory.html#createLineBorder(java.awt.Color, int,boolean)) – 2012-04-12 14:06:31

回答

2

爲了使一個JPanel顯得圓潤,你需要使自己的類繼承JPanel,重寫paintComponent,繪製面板爲橢圓Javadoc here這將創建一個自定義的對象,它是一個JPanel的。

當您指定橢圓的大小時,您需要從父面板獲取Y和X值(因爲您將在另一個面板的頂部添加橢圓),然後從所需的像素數中減去所需的像素數X軸。這可以通過將這些值傳遞給「橢圓面板」構造函數來實現。

+0

但是當re - 調整父面板dos的JpanelLeftContent重新大小呢?我應該重寫重繪方法嗎? – 2012-04-12 11:49:12

+0

您可以使用setter將「新」值設置到橢圓面板,並簡單地調用repaint – 2012-04-12 11:56:44

+0

*「您需要自己創建類擴展JPanel「*不一定,我認爲邊界是追求這種功能的更好的策略,請參閱我的回答, – 2012-04-12 12:15:55

4

..我可以使JpanelLeftContent看起來像一個圓角矩形,如圖所示。

請參閱TextBubbleBorder開始。

顯然,你需要在底部取出小v,&推下邊框進一步下跌。代碼沒有經過全面測試,需要進一步調整和修復。 '不包括電池'。

+0

這是一個很好的例子,幫助我加載:-) – 2012-04-12 14:39:02

+0

@nIcEcOw就像你的+ 1'able(已經做得更早)。我懷疑它解決了我的方法可能遭受的一些問題(使用插頁)。 – 2012-04-12 14:52:24

+0

但是使用JRE 1.7,人們永遠不會說,更多的bug會帶來什麼,同樣的東西也會持續這個東西,在水平調整大小LOL :( – 2012-04-12 15:38:54

3

不要嘗試這個代碼示例:

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

public class InsetTesting extends JFrame 
{ 
    private void createAndDisplayGUI() 
    { 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setLocationByPlatform(true); 

     JPanel contentPane = new JPanel(); 
     contentPane.setOpaque(true); 
     contentPane.setBorder(BorderFactory.createLineBorder(
            Color.DARK_GRAY.darker(), 5, true)); 
     contentPane.setBackground(Color.WHITE); 

     add(contentPane, BorderLayout.CENTER); 
     pack(); 
     setVisible(true); 
    } 

    public Insets getInsets() 
    { 
     return (new Insets(30, 20, 10, 20)); 
    } 

    public Dimension getPreferredSize() 
    { 
     return (new Dimension(200, 400)); 
    } 

    public static void main(String\u005B\u005D args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new InsetTesting().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

這裏是相同的輸出:

INSETS