2013-03-25 78 views
0

我有一個簡單的類StatPanel,它擴展了JPanel並且有幾個JTextFieldsJCheckBox和一對JLabels。該面板將用作一系列用於顯示信息的面板,並允許用戶編輯某些JTextFields中的數據,我可能將其中大約40個全部堆疊在程序一側的JScrollPaneJPanel。我使用的佈局是GridLayout(0,1)減少JPanel之間的差距

我讓它們工作,但是當它們在滾動面板中時,它們的間距相差太大。我嘗試更改邊距,更改GridLayout中的間距以及更改各種項目的邊距。我所做的沒有任何事情似乎讓他們更接近。

這是StatPanel類的構造函數:

public StatPanel(String statName, String statAbility){ 
     super(); 
     this.skillName = statName; 
     this.setAlignmentY(CENTER_ALIGNMENT); 
     isClassSkill = new JCheckBox(); 
     statLabel = new JLabel(skillName); 
     statTotalField = new JTextField(maxLength + 1); 
     statTotalField.setHorizontalAlignment(JTextField.CENTER); 
     statAbilityLabel = new JLabel("= " + statAbility + " "); 
     statAbilityModField = new JTextField(maxLength); 
     statAbilityModField.setHorizontalAlignment(JTextField.CENTER); 
     statSeperator1 = new JLabel(" + "); 
     statRanksField = new JTextField(maxLength); 
     statRanksField.setHorizontalAlignment(JTextField.CENTER); 
     statSeperator2 = new JLabel(" + "); 
     statMiscModField = new JTextField(maxLength); 
     statMiscModField.setHorizontalAlignment(JTextField.CENTER); 

     this.add(isClassSkill); 
     this.add(statLabel); 
     this.add(statTotalField); 
     this.add(statAbilityLabel); 
     this.add(statAbilityModField); 
     this.add(statSeperator1); 
     this.add(statRanksField); 
     this.add(statSeperator2); 
     this.add(statMiscModField); 
    } 
} 

當我在程序中使用它,它看起來是這樣的:

screenshot

正如我將堆這麼多他們我希望他們幾乎一個在另一個之上,但我似乎可以消除他們之間的差距。

這是如何完成的?

謝謝你的幫助。

回答

2

查看FlowLayout API。默認情況下,JPanel使用默認水平/垂直間距爲5像素的FlowLayout。您需要更改佈局管理器使用的垂直間距。因此,在你的方法的頂部,你將要添加:

setLayout(new FlowLayout(...)); 

編輯:

一旦更改的差距也將在頂部輸間隙/主面板的底部,所以你可能要向面板添加EmptyBorder

+0

+1打我吧 – MadProgrammer 2013-03-25 04:45:37

+0

@MadProgrammer,哇,這是一個變化,通常你比我的鍵盤快:-) – camickr 2013-03-25 04:50:47

+0

必須先檢查所有的假設;) – MadProgrammer 2013-03-25 04:59:31