2012-10-21 15 views
0

我有一些奇怪的,我不明白爲什麼發生。 我搜索了包括這裏的網頁,但無法找到答案。 我有3個組合框,其後是2。 它是一個小程序轉換工具。 每當我選擇我想要在主組合框中轉換的字段時,它將加載其他兩個值並進行轉換。但是在每次我選擇要將它轉換爲ComboBox的時候,都會加載它。 這是代碼:// 這是對象//////JComboBox和行動,新模型等

 MyEvent handler = new MyEvent(); 

    MainCombo = new JComboBox(issueArray); 
    MainCombo.setBounds(120, 50, 120, 20); 
    MainCombo.addActionListener(handler); 
    add(MainCombo); 

    Combo1 = new JComboBox(Angle); 
    Combo1.setBounds(120, 90, 120, 20); 
    Combo1.addActionListener(handler); 
    add(Combo1); 

    Combo2 = new JComboBox(Angle); 
    Combo2.setBounds(320, 90, 120, 20); 
    Combo2.addActionListener(handler); 
    add(Combo2); 

    //The Method To Change Values In The ComboBox 
    public void loadIssueParam(String Issue){ 
    Combo1.removeAllItems(); 
    Combo2.removeAllItems(); 
    switch (Issue) { 
     case "Angle": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Angle); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Area": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Area); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Data": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Data); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Energy": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Energy); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Force": 
      { 
       DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Force); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Length": 
      { 
       DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Length); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Mass": 
      { 
       DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Mass); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Power": 
      { 
       DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Power); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Pressure": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Pressure); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Speed": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Speed); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Temperature": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Temperature); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Time": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Time); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
     case "Volume": 
      { 
       DefaultComboBoxModel newModel= new DefaultComboBoxModel(Volume); 
       Combo1.setModel(newModel); 
       Combo2.setModel(newModel); 
       break; 
      } 
    } 

    /// I THINK MAYBE THIS METHOD HAVE SOMETHING TO DO WITH IT - OR I NEED SOME HOW TO 
    /// CLEAR THE SELECTION. 



     private class MyEvent implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent event){ 
     if(event.getSource()==MainCombo){ 
     JComboBox cb=(JComboBox)event.getSource(); 
     IssueBox=(String)cb.getSelectedItem(); 
     loadIssueParam(IssueBox); 
    } 
     if(event.getSource()==Combo1){ 
     JComboBox cb=(JComboBox)event.getSource(); 
     fromBox=(String)cb.getSelectedItem(); 
    } 
     if(event.getSource()==Combo2){ 
     JComboBox cb=(JComboBox)event.getSource(); 
     toBox=(String)cb.getSelectedItem(); 
    } 
    } 
} 

每一次當我做一個SUB選擇及其影響兩個子組合框。

感謝您的幫助 德尼羅

+0

你可以發佈所有的代碼,以便實際上可以運行它並重現此行爲? – Jagger

回答

3

啊,我現在明白了看你的代碼後,你的問題。您的問題是兩個子組合框共享相同的模型,因此如果您在一個子組合框中更改選擇,它將更改共享模型的狀態,導致其他子組合框更改其選擇。解決你的問題,給他們每個人自己的模型。

switch (Issue) { 
    case "Angle": 
     { 
      DefaultComboBoxModel newModel1 = new DefaultComboBoxModel(Angle); 
      DefaultComboBoxModel newModel2 = new DefaultComboBoxModel(Angle); 
      Combo1.setModel(newModel1); 
      Combo2.setModel(newModel2); 
      break; 
     } 
    // etc... 

另外,如HashMap<String, String[]>HashMap<String, Vector<String>>考慮使用地圖。做到這一點,正確填寫的地圖,那巨大的switch語句可以簡化爲

Combo1.setModel(new DefaultComboBoxModel(modelMap.get(Issue))); 
Combo2.setModel(new DefaultComboBoxModel(modelMap.get(Issue))); 

而接下來我們要對Java的命名規則工作。

+0

謝謝你這麼多。解決問題 !我實際上會試着用HashMap來做 - 看起來就像是更乾淨的解決方案。再次感謝 – Niro

+0

@Niro:不客氣,很高興它有幫助! –

+1

其工作與HashMap很好 - 謝謝 – Niro