Я пытаюсь создать графический интерфейс с использованием Swing на Java, который выполняет следующие действия:Как динамически добавлять элементы в JScrollPanel?
При нажатии кнопки «Добавить» создается JPanel и заполняет всю ширину графического интерфейса. Внутри JPanel будут созданы JLabels, используя FlowLayout, которые сообщают конкретные данные (например, имя, идентификатор пользователя и т. Д.). Когда бы ни была нажата кнопка «Добавить», я хочу, чтобы новый JPanel добавлялся прямо под предыдущим, так что JScrollPane при необходимости активирует свою вертикальную полосу прокрутки. В принципе, я хочу, чтобы JScrollPane мог динамически добавлять новые JPanels внутри него.
Однако у меня было несколько проблем, пытающихся это сделать. Я не могу понять, какой LayoutManager использовать для панели в JScrollPane. Я попытался использовать GridlLayout, но это не работает, потому что, когда есть достаточно JPanels, чтобы скрыть весь JScrollPane, GridLayout просто создает новый столбец, который хлюпает в новых JPanels вместо добавления его ниже предыдущего JPanel. Что я должен сделать для этого? Вот некоторые изображения того, что у меня есть, и пример того, что я хочу.
Вот что я хочу, чтобы это произошло:
Любая помощь будет принята с благодарностью, спасибо заранее! :)
EDIT: Вот пример моего кода, который я пробовал с помощью GridLayout.
public Window() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 701, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel buttonPanel = new JPanel();
contentPane.add(buttonPanel, BorderLayout.SOUTH);
JButton btnAdd = new JButton("Add");
buttonPanel.add(btnAdd);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
JPanel systemsPanel = new JPanel();
scrollPane.setViewportView(systemsPanel);
systemsPanel.setLayout(new GridLayout(8, 1, 0, 0)); //8 rows for now
for (int i = 1; i < 50; i++) {
systemsPanel.add(new JButton("test"), "cell 0 " + i);
}
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2 - this.getSize().width/2, dim.height/2 - this.getSize().height/2); //Center the Frame
}
Пожалуйста, создать и оставить в силе [mcve] для лучший шанс быстро получить наилучшую помощь. Этот код был бы небольшим, самостоятельным и размещался здесь как текст с отформатированным кодом с вашим вопросом, а не по ссылке. Удачи! –
И GridLayout должен работать нормально, но вы, вероятно, не используете его правильно. Опять же, покажите нам, как вы используете его в своем коде. Кроме того, вы уверены, что не хотите использовать JTable? –
Вы ошибаетесь. Это покажет нам, что вы делаете неправильно, и какие предположения у вас есть, которые неверны. Опять же, пожалуйста, покажите нам соответствующий код. И, пожалуйста, пройдите раздел [help], особенно подраздел о том, как задавать вопросы на этом сайте. –