2013-10-09 19 views
0

我想在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的大小。如果容器中有任何額外的垂直空間,我希望它可以自由放置。

+1

看看[這篇文章](http://stackoverflow.com/questions/17951886/cannot-add-checkbox-to-the-jlist/17952530#17952530)的一種方式來做一個複選框的列表。 – splungebob

+0

這是一個很好的實現。我已經有時間進入了我的方法,我發現它很難(很懶)改變它:(下一次當我需要一個複選框列表,我將使用你的。謝謝你的精彩解決方案。 –

回答

1

您是否嘗試將邊距和邊界插入設置爲0(在Swing組件上)?

+0

此外您可以設置每個JPanel和每個JCheckBox的邊框顏色,以查看哪個面板有額外的空間。 –

+0

您是否閱讀過'stackoverflow answer rules'?沒有問題應該回答:) – SeniorJD

+0

對不起。我會牢記在前進:) –

2

JPanel的默認佈局是FlowLayout,並且默認構造函數創建「缺省5單位水平和垂直間隙」。可以指定無間隙:

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

此外,JCheckBox UI委託增加Insets用信用證&變化F.我將警惕改變這些的:尺寸是可忽略的,並且通常需要容納選擇指示。