2013-11-30 3 views
0

Я создаю систему бронирования билетов для школы, и у меня есть точка, где пользователь должен выбрать количество людей из 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(); 
    } 
} 

ответ

0

Используйте массив Integer для числовых значений

Integer[] chosenNumberOfPersons = {1, 2, 3, 4, 5, 6, 7}; 
JComboBox dropDownPersons = new JComboBox(chosenNumberOfPersons); 
int numberOfPersons = 0; 

... 

dropDownPersons.addItemListener(new ItemListener(){ 
    public void itemStateChanged(ItemEvent e){ 
     numberOfPersons = (Integer)dropDownPersons.getSelectedItem(); 
    } 
}); 

Или так, как вы его с String [], просто разобрать его

dropDownPersons.addItemListener(new ItemListener(){ 
    public void itemStateChanged(ItemEvent e){ 
     numberOfPersons = Integer.parseInt(dropDownPersons.getSelectedItem()); 
    } 
}); 
+0

Когда я пытаюсь сделать то, что вы предлагаете выше, программа компилируется, но ничего не происходит, когда я выбираю числа из JComboBox. Номер, выбранный в поле со списком, должен содержать количество таблиц, отображаемых на экране. – user3052708

+0

Я не совсем уверен, как должен работать ваш код, без фактического тестирования полностью исполняемого кода. Я могу только догадываться (если панель рисует что-то), вы можете добавить 'repaint();' в конце метода. –

Смежные вопросы