2013-10-24 5 views
0

Мой код выглядит следующим образом:Как получить значение comboBox?

private void populateRoleNameComboBox() { 
    roleNameJComboBox.removeAllItems(); 
    roleNameJComboBox.addItem(UserAccountDirectory.ADMIN_ROLE); 
    roleNameJComboBox.addItem(UserAccountDirectory.SALESPERSON_ROLE); 
    roleNameJComboBox.addItem(UserAccountDirectory.SUPPLIER_ROLE); 
    roleNameJComboBox.addItem(UserAccountDirectory.CUSTOMER_ROLE); 
    //populatePersonNameComboBox(); 
} 


private void populatePersonNameComboBox() { 
     personNameJComboBox.removeAllItems(); 

     if(roleNameJComboBox.getSelectedItem().equals(UserAccountDirectory.SUPPLIER_ROLE)){ 
     for(Supplier s : supplierDirectory.getSupplierList()){ 
      personNameJComboBox.addItem(s); 
        } 
       } 
     else if(roleNameJComboBox.getSelectedItem().equals(UserAccountDirectory.SALESPERSON_ROLE)){ 
      for(Person p : employeeDirectory.getSalesPersonList()){ 
       personNameJComboBox.addItem(p); 
        } 
       } 
      else if(roleNameJComboBox.getSelectedItem().equals(UserAccountDirectory.CUSTOMER_ROLE)){ 
      for(Person person : customerDirectory.getCustomerList()){ 
       personNameJComboBox.addItem(person); 
        } 
       } 
    } 

Мои personNameJComboBox не показывая значений. Как я могу реализовать логику для получения значений для 2-го comboBox на основе 1-го.

ответ

3

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

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class ComboBoxTwo extends JFrame implements ActionListener 
{ 
    private JComboBox mainComboBox; 
    private JComboBox subComboBox; 
    private Hashtable subItems = new Hashtable(); 

    public ComboBoxTwo() 
    { 
     String[] items = { "Select Item", "Color", "Shape", "Fruit" }; 
     mainComboBox = new JComboBox(items); 
     mainComboBox.addActionListener(this); 

     // prevent action events from being fired when the up/down arrow keys are used 
     mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); 
     getContentPane().add(mainComboBox, BorderLayout.WEST); 

     // Create sub combo box with multiple models 

     subComboBox = new JComboBox(); 
     subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4 
     getContentPane().add(subComboBox, BorderLayout.EAST); 

     String[] subItems1 = { "Select Color", "Red", "Blue", "Green" }; 
     subItems.put(items[1], subItems1); 

     String[] subItems2 = { "Select Shape", "Circle", "Square", "Triangle" }; 
     subItems.put(items[2], subItems2); 

     String[] subItems3 = { "Select Fruit", "Apple", "Orange", "Banana" }; 
     subItems.put(items[3], subItems3); 
//  mainComboBox.setSelectedIndex(1); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     String item = (String)mainComboBox.getSelectedItem(); 
     Object o = subItems.get(item); 

     if (o == null) 
     { 
      subComboBox.setModel(new DefaultComboBoxModel()); 
     } 
     else 
     { 
      subComboBox.setModel(new DefaultComboBoxModel((String[])o)); 
     } 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new ComboBoxTwo(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
0

Каждого JComboBox ассоциируется с DefaultComboBoxModel по умолчанию для добавления элемента или управление изменением состояния элементов. Однако, если вы хотите добавить/удалить элемент на JComboBox, вы должны использовать реализацию MutableComboboxModel и DefaultComboBoxModel также реализует MutableComboBoxModel.

Я не вижу никаких причин, что ваш personNameJComboBox.addItem(item) не будет работать, , если вы не пытаетесь заполнить данные с вне прослушивания события действия в roleNameJComboBox, для которых по крайней мере, по пункту будет выбран. Убедитесь, что вы используете ActionListener с roleNameJcomboBox и реализуете функцию actionPerformed(), в которой вы должны позвонить функции populatePersonNameComboBox().

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