将JPanel大小设置为以较小的边距填充父级

时间:2012-04-12 11:28:44

标签: java swing jpanel dynamic-sizing

我有两个Jpanel( JpanelLeft JpanelLeftContent )如何使JpanelLeftContent填充父级大小,左侧和右侧略有边距。我尝试了不同的布局,并尝试修改hgap和vgap值,但没有一个给我一个好的结果。

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

如果可能的话,我如何使JpanelLeftContent看起来像一个圆角矩形,如图所示。

enter image description here

4 个答案:

答案 0 :(得分:4)

  

..如何让JpanelLeftContent看起来像一个圆角矩形,如图所示。

首先看TextBubbleBorder

显然你需要移除底部的小v,&将底部边界向下推。该代码未经过全面测试,需要进一步调整和修复。 '不包括电池'。

答案 1 :(得分:3)

了解Border的工作原理。特别是BorderFactory.createEmptyBorder(int top, int left, int bottom, int right)可能会有帮助。

答案 2 :(得分: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

答案 3 :(得分:2)

要使JPanel显示为四舍五入,您需要创建自己的类来扩展JPanel,覆盖paintComponent并将该面板绘制为椭圆Javadoc here这将创建一个自定义对象,即JPanel。

当您指定椭圆的大小时,您希望从父面板中获取Y和X值(因为您将在另一个面板的顶部添加椭圆),然后从X中减去所需的像素数-轴。这可以通过将这些值传递给“椭圆面板”构造函数来实现。