2016-11-29 63 views
0

我的問題是這樣的:我想要一個帶有組合框和確定按鈕的框架。我想從該列表中選擇一個項目,然後單擊確定,並基於所選項目有一個新項目的新組合框。如何聆聽按鈕動作添加組合框並再次聆聽動作Java

String[] locals = {"a bunch of strings"}; 

JComboBox<String> localsList = new JComboBox<String>(locals); 
     localsList.setSelectedIndex(0); 

     JButton okButton = new JButton("OK"); 
     p.add(localsList); 
     p.add(okButton); 

     okButton.addActionListener(new ActionListener() 
     { 

      public void actionPerformed(ActionEvent e) { 
       String value = localsList.getSelectedItem().toString(); 

       switch(value){ 

        case("a bunch of strings"): 
         JComboBox<String> concelhosList = new JComboBox<String>(concelhosL); 
         concelhosList.setSelectedIndex(0); 
         p.add(concelhosList); 

       } 
      } 
     }); 


     okButton.addActionListener(new ActionListener() 
      { 

       public void actionPerformed(ActionEvent e) { 
        String value = concelhosList.getSelectedItem().toString(); 

       } 
     }); 

的問題是,第一個動作聽者內concelhosList變量住宿等第二動作聽者不承認它,日食說我需要創建變量。

我該如何解決這個問題,或者是否有另一種方法來做到這一點?

回答

0

使其成爲只在actionPerformed中初始化的成員變量。你也不需要2個動作監聽器。只需使用if語句來檢查concelhosList是否爲空。如果是的話,你可以忽略它,去換另一個。

代碼看起來是這樣的:

okButton.addActionListener(new ActionListener() 
    { 

     public void actionPerformed(ActionEvent e) { 
      if(concelhosList==null){ 
      String value = localsList.getSelectedItem().toString(); 

      switch(value){ 

       case("a bunch of strings"): 
        concelhosList = new JComboBox<String>(concelhosL); 
        concelhosList.setSelectedIndex(0); 
        p.add(concelhosList); 

      } 
      }else{ 
       String value = concelhosList.getSelectedItem().toString(); 
      } 
     } 
    }); 
+0

不行的,它說,在'concelhosList =新JComboBox的(concelhosL);''那個地方在封閉範圍內定義的變量concelhosList必須是最終的或有效的最終' – user3636673

+0

concelhosL甚至不存在於您的代碼 – XtremeBaumer

0

如果你需要在你寫的其他邏輯您JComboBox - 只需將其解壓縮到上更多的餘地。

在你的榜樣,我建議把它旁邊的第一線,像這樣:

private String[] locals = {"a bunch of strings"}; 
private JComboBox<String> concelhosList; 
+0

其代碼中,因此沒有得到,因此這很好 – XtremeBaumer

+0

@XtremeBaumer得到了 - 但仍然看起來很奇怪。我重置用戶的選擇?看起來有點奇怪..但我把它編輯出來...... – MordechayS

+0

只是設置當你開始初始化GUI時你首先看到的項目。我不認爲有必要將它設置爲0,因爲我認爲它的標準。但如果你想要它,所以首先顯示一個空的項目,例如將其設置爲-1 – XtremeBaumer