2012-03-02 5 views
0

Я пытаюсь работать, чтобы отобразить несколько jtextfield в соответствии с одним из заданных значений в combobox.JCombobox и JTextfield

Итак, у меня будет выпадающее меню, давайте скажем от 1 до 4. Если пользователь выбирает номер 3, будут отображаться 3 текстовых поля. Я создал jcombobox с набором чисел. Но я не уверен, как это реализовать. Если я не ошибаюсь, мне нужно использовать

ItemEvent.SELECTED 

Я думаю, что мне нужно создать ссылку на объект JTextField, который будет доступен для объекта itemListener в JComboBox в.

Любая помощь была бы принята с благодарностью.

Я добавил это в моем классе:

// aOption is the combobox I declared 
aOptionComboBox.setModel(new DefaultComboBoxModel(new String[]{"1","2","3"})); 

public void itemStateChanged(ItemEvent event) { 

    String num = (String)aOptionComboBox.getSelectedItem(); 
    int num1 = Integer.parseInt(num); 
    JTextField[] textfields = new JTextField[num1]; 

    for (int i = 0; i < num1; i++) 
    { 
     textfields[i] = new JTextField("Field"); 
     getContentPane().add(textfields[i]); 
     textfields[i].setBounds(200, 90, 100, 25); 

    } 
} 

я на правильном пути?

+0

* «Я на правильном пути?» * Наверное, нет, если код использует 'setBounds'. *** Используйте макеты ***. Кроме того, для лучшей помощи, скорее, опубликуйте [SSCCE] (http://sscce.org/). –

+0

что случилось, когда вы его попробовали :-) Подсказка: вы, вероятно, захотите удалить любые поля, которые были добавлены ранее. Также: если это домашняя работа, пожалуйста, пометьте как таковой – kleopatra

+1

«Я на правильном пути?», Ответ на этот вопрос: Определенно, вы ошибаетесь. Поскольку внутри вашего цикла for, как вам очень рекомендуется @AndrewThompson, не использовать ** setBounds **. Но предположим, что если вы все еще используете его, не все созданные вами JTextFields расположены один над другим, в том же месте. Итак, как вы узнаете, сколько их на вашем «JFrame»? –

ответ

1

использовать getSelectedItem() в поле со списком. Это приведет либо к строке или целому числу (в зависимости от того, как вы ее реализовали). Затем используйте for-loop для определения количества JTextField и сохранения их в массиве.

int amount = myJComboBox.getSelectedItem(); 

JTextField[] textfields = new JTextField[amount]; 

for (int i = 0; i < amount; i++) { 
textfields[i] = new JTextField("awesome"); 
this.add(textfields[i]); 
} 

Таким образом, вы можете легко сохранить текстовые поля и добавить их на свою панель.

Дополнительная информация.

Текстовый массив должен быть доступен за пределами eventListener, поэтому вы должны реализовать его в своем классе. таким образом весь класс может его использовать.

+0

Я добавил это в моем классе: общественного недействительными itemStateChanged (ItemEvent событие) { /* aOption является выпадающий я объявил aOptionComboBox.setModel (новый DefaultComboBoxModel (новый String [] { "1",» 2" , "3"})); */ Строка num = (String) aOptionComboBox.getSelectedItem(); int num1 = Integer.parseInt (num); JTextField [] textfields = new JTextField [num1]; для (int i = 0; i nothingme

+0

@nothingme Измените этот код на свой вопрос (и используйте форматирование кода). На данный момент он не читается. –

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