2
如何設置包含JScrollPane
的容器的大小以便滾動條不出現?設置包含JScrollPane的容器的大小,使滾動條不可見
考慮這個SSCCE(使用MigLayout):
public static void main(String[] args) {
JPanel panel = new JPanel(new MigLayout());
for(int i = 0; i < 15; i++) {
JTextArea textArea = new JTextArea();
textArea.setColumns(20);
textArea.setRows(5);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane jsp = new JScrollPane(textArea);
panel.add(new JLabel("Notes" + i));
panel.add(jsp, "span, grow");
}
JScrollPane jsp = new JScrollPane(panel);
JFrame frame = new JFrame();
frame.add(jsp);
frame.pack();
frame.setSize(jsp.getViewport().getViewSize().width, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
正如你所看到的,我試圖找出放什麼在這條線:
frame.setSize(jsp.getViewport().getViewSize().width, 500);
的目標是建立相對於視口內容的寬度,以便不需要水平滾動條。
應該是:
編輯:繼camikr的建議,這是結果:
public static final int pref_height = 500;
public static void main(String[] args) {
JPanel panel = new JPanel(new MigLayout());
for(int i = 0; i < 15; i++) {
JTextArea textArea = new JTextArea();
textArea.setColumns(20);
textArea.setRows(5);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane jsp = new JScrollPane(textArea);
panel.add(new JLabel("Notes" + i));
panel.add(jsp, "span, grow");
}
JScrollPane jsp = new JScrollPane(panel) {
@Override
public Dimension getPreferredSize() {
setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Dimension dim = new Dimension(super.getPreferredSize().width + getVerticalScrollBar().getSize().width, pref_height);
setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
return dim;
}
};
JFrame frame = new JFrame();
frame.add(jsp);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
似乎有點hackish的我,但它的工作原理。
對我來說似乎有點ha but,但它起作用。發佈最終的解決方案,在編輯問題... – ryvantage
@ryvantage JComboBox和JScrollPane無法返回合理的尺寸, – mKorbel