2010-11-04 5 views
0

Я пытался иметь два Jcomboxes, где второй Jcombox должен менять свои значения в соответствии с изменением в первом. Я пробовал, но не смог, Любая помощь приветствуется. Благодаряjava JComboBox issue

Это то, что я пытался до сих пор:

public class SharedDataBetweenComboBoxSample { 

    static private String selectedString(ItemSelectable is) { 
     Object selected[] = is.getSelectedObjects(); 
     return ((selected.length == 0) ? "null" : (String)selected[0]); 
    } 

    public static void main(String args[]) { 
     final String labels[] = { "A", "B", "C" }; 
     final String labelsA[] = { "A", "AA", "AAA" }; 
     final String labelsB[] = { "B", "BB", "BBB" }; 
     final String labelsC[] = { "C", "CC", "CCC" }; 

     final JFrame frame = new JFrame("Shared Data"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel(); 
     JComboBox comboBox1 = new JComboBox(); 
     comboBox1.addItem(labels); 
     comboBox1.setSelectedItem(null); 

     final JComboBox comboBox2 = new JComboBox(); 
     // comboBox2.setEditable(true); 
     panel.add(comboBox1); 
     panel.add(comboBox2); 
     frame.add(panel,BorderLayout.NORTH); 

     ItemListener itemListener = new ItemListener() { 
      public void itemStateChanged(ItemEvent itemEvent) { 
       int state = itemEvent.getStateChange(); 
       System.out.println((state == ItemEvent.SELECTED) ? "Selected" : "Deselected"); 
       System.out.println("Item: " + itemEvent.getItem()); 
       ItemSelectable is = itemEvent.getItemSelectable(); 
       System.out.println(", Selected: " + selectedString(is)); 
       if (selectedString(is) == "B") { 
        comboBox2.addItem(labelsB); 
        // frame.add(comboBox1, BorderLayout.CENTER); 
       } else if (selectedString(is) == "A") { 
        comboBox2.addItem(labelsA); 
        // frame.add(comboBox1, BorderLayout.CENTER); 
       } else if (selectedString(is) == "C") { 
        comboBox2.addItem(labelsC); 
        // frame.add(comboBox1, BorderLayout.CENTER); 
       } else { 
        comboBox2.setSelectedItem(null); 
        // frame.add(comboBox1, BorderLayout.CENTER); 
       } 
      } 

     }; 
     comboBox1.addItemListener(itemListener); 

     frame.setSize(300,200); 
     frame.setVisible(true); 
    } 
} 
+0

Я уверен, что это дубликат – hvgotcodes

+0

Я попробовал несколько примеров с exampledepot.com, а некоторые с java2s.com, но я не мог заставить его работать в соответствии с моей потребностью. – user234194

+0

Почему бы вам не начать с редактирования публикации и размещения правильно отформатированного кода. Как вы ожидаете, что мы будем читать код, который форматируется случайным образом. – camickr

ответ

1
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); 

    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); 
} 

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

не совсем уверен, что ваша проблема в том, как вы не говорите. Может быть, вопрос

comboBox2.addItem(labelsB); 

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

Я предполагаю, что вы пытаетесь использовать несколько вариантов в первом списке (на основе операции selectedString), если ваш код не является милями? Если вы не хотите if/else конструкцию, только несколько if ы

Кроме того, не используйте (selectedString(is)=="A"), вы можете получить повезло, но вы должны использовать `«А».equals (selectedString (есть))

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