Я создаю систему бронирования билетов для школы, и у меня есть точка, где пользователь должен выбрать количество людей из JComboBox. Значение с этим полем со списком состоит в том, что, например, пользователь выбирает 3, тогда появятся 3 окна, в которых пользователь должен ввести некоторую контактную информацию.Как разрешить пользователю определять количество отображаемых таблиц с помощью JComboBox?
Но каждый раз, когда я запускаю свою программу, мне нужно вручную установить numberOfPersons, чтобы заставить ее работать. Я думаю о способе, который устанавливает выбранное значение в JComboBox равным переменной numberOfPersons. Но как? Любая помощь приветствуется ..
вот мой код до сих пор (кстати, у меня есть некоторые другие классы, а также, но это должно быть достаточно, я надеюсь)
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
/**
* This class draws the panel in which you can fill in passengers data
*
* @author ([email protected], [email protected], [email protected])
*/
public class PersonInfoDraw extends MakeReservationGUIDrawer
{
private JFrame frame;
ArrayList<JPanel> infoPanelArray;
ArrayList<JTextField> textFieldArray;
private String[] chosenNumberOfPersons =
{
"1", "2", "3", "4", "5", "6", "7"
};
JComboBox dropDownPersons = new JComboBox(chosenNumberOfPersons);
int numberOfPersons = 5;
public PersonInfoDraw(MakeReservationGUIFlow parentObject, JPanel panel)
{
super(parentObject, panel);
fillFrame(panel);
}
public void fillFrame(JPanel parentsPanel)
{
frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
JPanel northPanel = new JPanel();
northPanel.setBackground(Color.darkGray);
JLabel titleLabel = new JLabel("Indtast Kundeinformation: ");
titleLabel.setForeground(Color.white);
northPanel.add(titleLabel);
northPanel.add(dropDownPersons);
JPanel southPanel = new JPanel();
southPanel.setBackground(Color.gray);
final JPanel centerPanel = new JPanel(new GridLayout(((int) Math.ceil((numberOfPersons/2.0))), 1));
contentPane.add(northPanel, BorderLayout.NORTH);
contentPane.add(centerPanel, BorderLayout.CENTER);
contentPane.add(southPanel, BorderLayout.SOUTH);
centerPanel.setBorder(new EmptyBorder(6, 6, 6, 6));
centerPanel.setBorder(new EtchedBorder());
/* infoPanelArray holder et array af JPanels. Hvis der er 3 passagerer
vil infoPanelArray tilsidst indeholde 3 JPanels */
infoPanelArray = new ArrayList<>();
/*
textFieldArray holder et array af tekstfelter. Det gør at vi senere let
kan tilgå indholdet af tekstfelterne
*/
textFieldArray = new ArrayList<>();
/* Et array af string-beskrivelser til de JLabels, der placeres ved
siden af tekstfelterne i GUI'et
*/
int counter = 0;
int x;
/* Denne løkke køres lige så mange gange, som det valgte antal
passagerer
*/
for (int i = 0; i < numberOfPersons; i++)
{
/*
Først tilføjes et JPanel(5 rækker, 2 kolonner) til infoPanelArray.
Bemærk, at et JPanel med GridLayout fyldes ud rækkevist,
ikke kolonnevist!
*/
infoPanelArray.add(new JPanel(new GridLayout(5, numberOfPersons)));
x = i + 1;
String[] descriptions =
{
" Fornavn: (Person " + x + ")*", " Efternavn:*", " CPR-nummer:*", " Pasnummer:*",
};
for (int j = 0; j < 4; j++)
{
/* I det JPanel, som vi lige har lagt ind i infoPanelArray
tilføjes nu en JLabel med en string fra descriptions-arrayet
*/
infoPanelArray.get(i).add(new JLabel(descriptions[j]));
/*
Herefter tilføjes et JTextField
*/
textFieldArray.add(new JTextField(15));
/*
Nu tilføjes det JTextField, vi lige har lavet, til infoPanel
*/
infoPanelArray.get(i).add(textFieldArray.get(counter));
counter++;
}
// Til sidst lægges det ind i centerPanel
centerPanel.add(infoPanelArray.get(i));
}
JButton button = new JButton("Gem og fortsæt");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
revealNextStep();
}
});
southPanel.add(button);
frame.pack();
contentPane.setVisible(true);
parentsPanel.add(contentPane);
parentsPanel.updateUI();
}
protected void revealNextStep()
{
parentObject.drawSeatSelector();
}
}
Когда я пытаюсь сделать то, что вы предлагаете выше, программа компилируется, но ничего не происходит, когда я выбираю числа из JComboBox. Номер, выбранный в поле со списком, должен содержать количество таблиц, отображаемых на экране. – user3052708
Я не совсем уверен, как должен работать ваш код, без фактического тестирования полностью исполняемого кода. Я могу только догадываться (если панель рисует что-то), вы можете добавить 'repaint();' в конце метода. –