Вставьте JPanel с нулевым макетом в JScroll
У меня есть JPanel (myPanel) с большим количеством кнопок внутри (эта панель содержится в другой панели, содержащей другие компоненты). Я бы вставил этот JPanel (myPanel) в свиток, чтобы лучше контролировать кнопку.
Это часть моего кода:
JPanel firstPanel = new JPanel(null);
......
......
JPanel myPanel = new JPanel(null);
myPanel.setBounds(0, position+22, 400, 500);
for (int i=0; i<size; i++) {
JButton button = new JButton(myList.get(i));
if (counter%4 == 0) {
button.setBounds(270, 0+(4*i), 90, 18);
} else if (counter%3 == 0) {
button.setBounds(180, 4+(4*i), 90, 18);
} else if (counter%2 == 0) {
button.setBounds(90, 8+(4*i), 90, 18);
} else {
button.setBounds(0, 12+(4*i), 90, 18);
}
myPanel.add(bottone);
}
......
......
firstPanel.add(myPanel);
Итак, как я могу сделать, чтобы вставить его в свиток?
1 ответ
Похоже, ваш вопрос спрашивает о том, как добавить JPanel в JScrollPane, когда JPanel использует null
макет, и ответ прост:
- Прежде всего, не используйте
null
раскладка. Использование нулевых макетов почти гарантирует, что компонент, содержащийся в JScrollPane, не будет прокручиваться надлежащим образом, поскольку механика JScrollPane требует использования этого. - Либо это, либо вам потребуется создать класс, который расширяет JPanel и реализует интерфейс Scrollable, а это потребует гораздо больше работы и совершенно ненужной работы.
- Вместо этого вы действительно должны научиться использовать, а затем использовать соответствующий набор менеджеров компоновки, чтобы ваши JPanels удерживали и отображали их компоненты. Обратите внимание, что вы можете вкладывать JPanels, каждый из которых использует свой собственный макет, тем самым легко создавая сложные, но простые в обслуживании графические интерфейсы. Пожалуйста, ознакомьтесь с руководством по компоновке для получения дополнительной информации по этому вопросу.
- Добавить JPanel в JScrollPane легко. Либо передайте JPanel в конструктор JScrollPane:
JScrollPane scrollpane = new JScrollPane(myPanel);
или передайте JPanel в представление области просмотра JScrollPane черезsetViewportView(myPanel)
, Вот учебник JScrollPane для получения дополнительной информации об этом и общие учебники Swing.