2013-10-04 65 views
2

我有3個組合框,選擇第一個組合框後,其餘的應該更新,但我的代碼似乎並沒有工作。請幫助這個傢伙。這是我的代碼(因爲我的代碼很長,所以我只寫錯誤部分)。如何更新Swing中的JComboBox實例?

// example code 
public class GuiComponents { 
    JComboBox<String> comboBox1, comboBox2, comboBox3; 

    public GuiComponents() { 
    ......... 
    ......... 


    String[] element1 = {"item1", "item2", "item3"}; 
    String[] element2 = {"item1", "item2", item3}; 
    String[] element3 = {"item1", "item2", "item3"}; 

    comboBox1.addItemListener(new ItemListener() { 

     @Override 
     public void itemStateChanged(ItemEvent event) { 
      if(event.getStateChange() == ItemEvent.SELECTED) { 
     // how do I update 2 comboboxes, upon selecting combobox1. 
        // combox2 should update as(element2) and 
        // combox3 should update as element3. 
      } 
     } 
    }); 
    } 
} 

在此先感謝....

+0

*「(因爲我的代碼很長,所以我只寫錯誤部分)。」 *爲了更好地幫助越早,張貼[SSCCE(HTTP: //sscce.org/)。 *「我的代碼似乎沒有工作」*您嘗試了什麼?該代碼段沒有任何嘗試,它讀起來像「'//完成我的工作,謝謝'」。 –

+0

我是否需要在此發佈所有代碼? – user1874936

+0

@ user1874936一個演示問題的可運行示例... – MadProgrammer

回答

2

如果你的目的是當用戶進行選擇來改變組合框的值,那麼你最好使用ActionListener

如果你想組合框的用戶選擇在下拉列表中選擇不同的項目(是的,這是一個不同的事件),每次更新,那麼你應該使用ItemListener

但在這兩種情況下,這個過程是一樣的...

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class ComboBoxUpdates { 

    public static void main(String[] args) { 
     new ComboBoxUpdates(); 
    } 

    public ComboBoxUpdates() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JComboBox<String> cb1, cb2, cb3; 

     public TestPane() { 
      cb1 = new JComboBox<>(new String[]{"Click me", "Click me", "Click them"}); 
      cb2 = new JComboBox<>(); 
      cb3 = new JComboBox<>(); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      add(cb1, gbc); 
      add(cb2, gbc); 
      add(cb3, gbc); 

      cb1.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        cb2.setModel(new DefaultComboBoxModel<String>(new String[]{"item1", "item2", "item3"})); 
        cb3.setModel(new DefaultComboBoxModel<String>(new String[]{"item4", "item5", "item6"})); 
       } 
      }); 
     }  
    } 
} 
+0

非常感謝很多人的工作...... – user1874936

+0

@ user1874936這使得一個變化:P – MadProgrammer