我有一個我偶爾添加一些組件的子面板。我期望FlowLayout正確地佈置它們。我把subPanel放在一個JScrollPane中,讓用戶看到所有的組件,但我不想打擾用戶水平滾動。但是JScrollPane讓subPanel在添加更多組件時水平擴展。通過這種方式,所有組件都水平顯示爲一行。這意味着最糟糕的佈局。防止JScrollPane擴展其viewPort組件
this.setLayout(new GridLayout(1, 1));
subPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
subPanel.setMaximumSize(new Dimension(500, 4000));
subPanel.setBackground(Color.CYAN);
subPane = new JScrollPane(subPanel);
subPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
subPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(subPane);
別的地方我已經加了的ComponentListener來解決這個問題,但問題仍然存在:
@Override
public void componentShown(ComponentEvent e) {
subPanel.setSize(getSize());
}
@Override
public void componentResized(ComponentEvent e) {
subPanel.setSize(getSize());
}
而且this
是在JTabbedPane中完全所造成,因此佔據了所有的選項卡中的JPanel。
不要使用ComponentListener來播放大小。佈局管理器將管理組件的首選大小,這反過來將允許滾動窗格正常工作。 – camickr
您能否告訴我,JScrollPane使用哪個佈局來構造其獨特的組件?問題在於JScrollPane內部的組件佈局不受管理!所以我不同意,但我歡迎更好的解決方案。 @camickr – puk
JScrollPane有一個自定義佈局管理器,你永遠不會改變它。佈局管理器負責管理視口,滾動條和列和行標題。所有你需要做的是確保你添加到滾動窗格的組件使用佈局管理器,我已經給你一個建議使用哪一個。 – camickr