【问题标题】:Wrapping JPanel around JCheckBox without any space - Swing将 JPanel 包裹在 JCheckBox 周围,没有任何空间 - Swing
【发布时间】:2013-10-09 12:14:28
【问题描述】:

我想在 JPanel 中显示 JCheckBox-es 的垂直列表。但我决定用 JPanel 包装每个 JCheckBox,(认为我将来会需要它)。我将使用 BoxLayout 将这些 JPanel(每个都包含一个 JCheckBox)垂直堆叠在另一个 JPanel 中。

BoxLayout 按预期工作,在添加到它们的 JPanel 之间没有任何垂直空间。我的问题是这些包含单个复选框的内部 JPanel。每个面板的复选框周围都有相当大的空间。我想把这些复选框紧紧地包裹起来,让jcheckbox的大小和包含它们的对应jpanel的大小相等。

对于这些单独的 jpanel,我尝试了布局 - 流布局和默认布局。两者都没有帮助。

我该如何解决这个问题?我只是简单地设置flowlayout并将jcheckbox直接添加到jpanel。我没有使用过其他代码。

我正在添加一个示例代码: 导入 java.awt.Color; 导入 java.awt.Dimension; 导入 java.awt.FlowLayout;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class TryBox  implements Runnable{

/**
 * @param args
 */
public static void main(String args[])
{
   SwingUtilities.invokeLater(new TryBox());
}
public void run()
{
    class InnerPanel extends JPanel
    {

        public InnerPanel(int i) {
            // TODO Auto-generated constructor stub
            setLayout(new FlowLayout());    

            setBackground(new Color(i*50, i*50, i*50));

            add(new JCheckBox("CheckBox "+i));

        }

    }
    JPanel outerPanel = new JPanel();
    outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));

    for(int i=0;i<5;i++)
    {
        outerPanel.add(new InnerPanel(i));
    }
     JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane sp = new JScrollPane(outerPanel);
        frame.setPreferredSize(new Dimension(200, 600));
        frame.getContentPane().add(new JScrollPane(outerPanel));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
}

}

frame.setPreferredSize(new Dimension(200, 600)); 正在发挥作用。我希望 jpanels 减少到 jcheckboxes 的大小。我不希望 jcheckboxes 适合 jpanel 的大小。如果容器中有任何额外的垂直空间,我希望它是空闲的。

【问题讨论】:

  • 查看this post 的一种方法来制作复选框列表。
  • 这是一个不错的实现。我有一段时间采用了我的方法,但我发现很难(我很懒)改变它:(。下次我需要一个复选框列表时,我会使用你的。谢谢你的精彩解决方案。

标签: java swing layout


【解决方案1】:

JPanel的默认布局为FlowLayout,默认构造函数创建“默认5个单位的水平和垂直间隙”。您可以指定无间隙:

JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));

此外,JCheckBox UI 代表添加了 Insets,这会因 L&F 而异。我会谨慎更改这些:大小可以忽略不计,通常需要适应选择指示。

【讨论】:

    【解决方案2】:

    您是否尝试将边距和边框插入设置为 0(在 Swing 组件上)?

    【讨论】:

    • 另外可以设置每个JPanel和每个JCheckBox的边框颜色,看看哪个面板有多余的空间。
    • 你读过stackoverflow answer rules 吗?答案中不应该有任何问题:)
    • 很抱歉。我会牢记这一点,继续前进:)
    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多