我想在JPanel中顯示JCheckBox-es的垂直列表。但是我決定用Jpanel來包裝每個JCheckBox,(以爲我將來需要它)。我將使用BoxLayout在另一個JPanel中垂直堆疊這些JPanel(每個包含一個JCheckBox)。繞JCheckBox包裝JPanel而沒有任何空間 - Swing
BoxLayout按預期工作,在添加到它們之間的JPanel之間沒有任何垂直空間。我的問題是這些內部JPanel包含單獨的複選框。每個面板的複選框周圍都有相當多的空間。我想緊緊地包裝這些複選框,以便jcheckbox和包含它們的相應jpanel的大小相等。
對於這些個人jpanel我已經嘗試過佈局 - 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的大小。如果容器中有任何額外的垂直空間,我希望它可以自由放置。
看看[這篇文章](http://stackoverflow.com/questions/17951886/cannot-add-checkbox-to-the-jlist/17952530#17952530)的一種方式來做一個複選框的列表。 – splungebob
這是一個很好的實現。我已經有時間進入了我的方法,我發現它很難(很懶)改變它:(下一次當我需要一個複選框列表,我將使用你的。謝謝你的精彩解決方案。 –