У меня есть следующая часть кода:Java JScrollPane иногда не удается изменить размер
final JList<String> list = new JList<String>(strings);
list.setLayoutOrientation(JList.VERTICAL);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
/* Create scroll pane instance */
JScrollPane scroll = new JScrollPane(list) {
@Override
public Dimension getPreferredSize()
{
BookFrame frame = BookFrame.instance();
Container parent = getParent();
return new Dimension(frame.getWidth(), parent.getHeight() - parent.getComponent(parent.getComponentCount() - 1).getHeight() - 14);
}
};
/* Create button instance */
JButton button = new JButton("Add Directory");
/* Add new panel */
JPanel panel = new JPanel();
panel.add(scroll);
panel.add(button);
Этот код работает, когда программа запускается, а иногда высота кнопки нормальное значение (например, 15). Но иногда это 0. Я думаю, проблема связана с экземпляром JScrollPane - он был создан до экземпляра JButton, но я не могу синхронизировать. Я также попытался добавить JButton button = ...
до JScrollPane scroll = ...
, но он тоже не работает.
Я новичок на Java, поэтому, пожалуйста, скажите мне, что я делаю неправильно.
Но как я могу изменить размер моей 'JScrollPane' динамически? Как это сделать с помощью 'setVisibleRowCount (...)'? – ventaquil
@ventaquil. Любой компонент, добавленный в CENTER JFrame, будет динамически изменяться по мере изменения размера кадра. SetVisibleRowCount() - это предложение, когда вы используете метод pack(). Прочтите раздел из учебника Swing [Как использовать BorderLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html) для получения дополнительной информации и рабочих примеров. Загрузите – camickr
okay - проблема с 'JPanel'. Когда я добавляю прокрутку 'getContentPane(). Add (..)' method' setVisibleRowCount (..) 'работает хорошо. Благодаря :) – ventaquil