我想在 JPanel 中显示 JCheckBox-es 的垂直列表。但我决定用 JPanel 包装每个 JCheckBox,(认为我将来会需要它)。我将使用 BoxLayout 将这些 JPanel(每个包含一个 JCheckBox)垂直堆叠在另一个 JPanel 中。
BoxLayout 按预期工作,在添加到它们的 JPanel 之间没有任何垂直空间。我的问题是这些包含单个复选框的内部 JPanel。每个面板的复选框周围都有相当大的空间。我想将这些复选框紧紧地包裹起来,以便 jcheckbox 的大小和包含它们的相应 jpanel 的大小相等。
对于这些单独的 jpanel,我尝试了布局 - flowlayout 和默认布局。两者都没有帮助。
我怎样才能解决这个问题?我只是简单地设置flowlayout并将jcheckbox直接添加到jpanel。我没有使用过其他代码。
我正在添加一个示例代码:import 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 的大小。如果容器中有任何额外的垂直空间,我希望它是空闲的。