Я везде (here и here), чтобы найти ответ на мою проблему. Я пытаюсь добавить неизвестное число JButton
в JScrollPane
в зависимости от выбора JComboBox
. Я знаю, что вам нужно добавить элемент в JPanel
, чтобы получить их в графическом интерфейсе.Добавление неизвестного числа JButton в JScrollPane
Вот пример кода: (Это does'nt работа), это пример)
public class test {
ArrayList<JButton> button = new ArrayList<JButton>();
String[] stringArray = {"Goat", "Cow", "Dog", "Cat", "Human"};
JComboBox comboBox = new JComboBox(stringArray);
JPanel containerPanel = new JPanel();
JScrollPane scroller = new JScrollPane(containerPanel);
public void addButton(String btnName) {
button.add(new JButton(btnName));
containerPanel.add(button.get(button.size() - 1));
}
public class Action implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
addButton(comboBox.getSelectedItem().toString());
}
}
}
Я хочу добавить столько JButton
, как пользователь хочет.
Если я просто добавить их следующим образом:
containerPanel.add(new JButton("test"));
Это работает, но это не то, что я хочу достичь.
Вы можете мне помочь?
EDIT: ___________________________________________________________________________
Вот код, который компилировать и является упрощенной копией того, что я пытаюсь сделать:
public class Frame extends JFrame {
String[] list = {"Human", "Goat", "Dog", "Cat", "Duck"};
ArrayList<JButton> button = new ArrayList<JButton>();
JComboBox cBox = new JComboBox(list);
JPanel container = new JPanel();
JScrollPane scroller = new JScrollPane(container);
public Frame() {
cBox.addActionListener(new Action());
this.setLayout(new BorderLayout());
this.setSize(200, 200);
this.add(cBox, BorderLayout.SOUTH);
this.add(scroller, BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void createBtn(String s) {
System.out.println("Button's label : " + s);
button.add(new JButton(s));
System.out.println("Button's index : " + (button.size() - 1));
container.add(button.get(button.size() - 1));
}
public class Action implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action made");
JComboBox temp = (JComboBox) e.getSource();
createBtn(temp.getSelectedItem().toString());
}
}
}
Вы указываете [этот вопрос] (http://stackoverflow.com/questions/22268958/how-to-add-jbutton-on-jscrollpane), и все же вы необъяснимо игнорируете ответ на использование подходящего макета, такого как GridLayout - почему? Почему бы не установить макет containerPanel в GridLayout и добавить к нему свои кнопки? –
Ehm просто используйте цикл, чтобы добавить столько кнопок, сколько хотите? –
@HovercraftFullOfEels Я попытался использовать «BoxLayout», а также «FlowLayout», но никто не работает. – Chax