2012-04-12 66 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