2015-05-28 58 views
0

我有一個JPanel與佈局CardLayout和在每張卡片有另一JPanel與佈局BorderLayout其中JScrollPane裏面。如何防止JScrollPane內部的組件調整大小?

即。

JScrollPane jscrollPane = new JScrollPane(filter.getFilterComponent()); 
JPanel jPanel = new JPanel(new CardLayout()); 
jPanel.add(jscrollPane); 

JPanel container = new JPanel(new BorderLayout()); 
container.add(jPanel, BorderLayout.CENTER); 

filter.getFilterComponent()可以文本框,複選框列表或等

問題是,當它是一個JTextField它看起來像這樣 JTextField

這是不可取的行爲。當我使用FlowLayout時,無論組件有多高,滾動條都不會出現。我認爲它是因爲其父容器preferredSize爲0

如何防止JScrollPane中的組件重新調整大小並將其維度保持原來的大小?或者有另一種方法來做到這一點?

+1

我會嘗試使用'GridBagLayout',如果失敗,請考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這會減少混淆和更好的響應 – MadProgrammer

+0

好的,我會先嚐試'GridBagLayout'。 – newbie

回答

0

我用FlowLayout代替BorderLayout

JPanel container = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0)); 
container.add(jPanel); 

和設定的JScrollPane

JScrollPane jscrollPane = new JScrollPane(filter.getFilterComponent()); 
jscrollPane.setPreferredSize(new Dimension(XX,YY)); 

XXYY優選大小是在父容器的寬度和高度,所以如果內的內容滾動窗格超過了首選大小,它將滾動

+0

請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是)。 –

相關問題