【问题标题】:Set the JPanel size to fill parent with little margin将 JPanel 大小设置为以很小的边距填充父级
【发布时间】:2012-04-12 11:28:44
【问题描述】:

我有两个 Jpanel(JpanelLeftJpanelLeftContent)我怎样才能使 JpanelLeftContent 填充父尺寸并在左侧和右侧留出一点边距。我尝试了不同的布局并尝试修改 hgap 和 vgap 值,但它们都没有给我一个好的结果。

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

如果可能的话,我怎样才能让 JpanelLeftContent 看起来像一个圆角矩形,如图所示。

【问题讨论】:

标签: java swing jpanel dynamic-sizing


【解决方案1】:

..我怎样才能让 JpanelLeftContent 看起来像一个圆角矩形,如图所示。

请参阅TextBubbleBorder 了解开始。

显然,您需要删除底部的小v,并将底部边框进一步向下推。该代码没有经过全面测试,需要进一步的调整和修复。 '不包括电池'。

【讨论】:

  • @nIcEcOw 你的也是 +1'able(之前已经完成)。我怀疑它解决了我的方法可能遇到的一些问题(使用插图)。
  • 但是使用 JRE 1.7,我们永远无法说,还会带来什么错误,因为同样的事情也会持续存在,水平调整 LOL :(
【解决方案2】:

看看Borders 是如何工作的。特别是
BorderFactory.createEmptyBorder(int top, int left, int bottom, int right) 可能会有帮助。

【讨论】:

    【解决方案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();
                }
            });
        }
    }
    

    这是相同的输出:

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 但是当重新调整父面板的大小时,JpanelLeftContent 也会重新调整大小吗?我也应该重写重绘方法吗?
      • 您可以使用 setter 为椭圆面板设置“新”值,然后调用 repaint
      • “你需要创建自己的扩展 JPanel 的类” 不一定。我认为边框是追求此功能的更好策略。看我的回答。
      猜你喜欢
      • 2020-07-12
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2014-03-15
      • 2011-05-14
      相关资源
      最近更新 更多