我想在JPanel中显示JCheckBox-es的垂直列表。但我决定用JPanel包装每个JCheckBox,(以为我将来需要它)。我将使用BoxLayout将这些JPanels(每个包含一个JCheckBox)垂直堆叠在另一个JPanel中。
BoxLayout按预期工作,添加的JPanel之间没有任何垂直空间。我的问题是这些内部JPanels包含单独的复选框。每个面板的复选框周围都有相当大的空间。我想紧紧包装这些复选框,以便jcheckbox的大小和包含它们的相应jpanel的大小相等。
对于这些单独的jpanel,我尝试过布局 - flowlayout和默认布局。两人都没有帮助。
我该如何解决这个问题?我只需设置flowlayout并将jcheckbox直接添加到jpanel。我没有使用其他代码。
我正在添加一个示例代码: import java.awt.Color; import java.awt.Dimension; import 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的大小。如果容器中有任何额外的垂直空间,我希望它是免费的。
答案 0 :(得分:2)
JPanel
的默认布局为FlowLayout
,默认构造函数创建“默认的5个单位水平和垂直间距”。您可以指定无间隙:
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
此外,JCheckBox
UI代表添加的Insets
因L&amp; F而异。我会谨慎地改变这些:尺寸可以忽略不计,通常需要适应选择指示。
答案 1 :(得分:1)
您是否尝试将边距和边框插入设置为0(在Swing组件上)?