2013-03-22 74 views
0

我在使用我在Controller類中填充的數組字符串生成下拉列表時遇到問題。該列表顯示在GUI中,但不包含任何值。我錯誤地使用了getter/setter方法嗎?儘管查看JComboBoxes的Oracle文檔,但我一直無法找到示例。 api引用了setModel方法,我認爲我錯誤地使用了它。誰能提供一個簡單的例子?使用getter/setters填充JComboBox的問題

package example; 

import javax.swing.*; 

public class MyApp extends JFrame { 
    JTabbedPane tabbedPane = new JTabbedPane(); 
    View view = new View(); 
    ColourView colourView = new ColourView(); 
    Controller controller = new Controller(colourView); 

public MyApp() { 
    tabbedPane.add("First Tab", colourView); 
    getContentPane().add(tabbedPane); 
} 
package example; 

import javax.swing.*; 

public class ColourView extends View { 

private JLabel colourLabel; 
private JComboBox comboBox; 

public ColourView() { 
    colourLabel = new JLabel(); 
    colourLabel.setText("Colours"); 
    colourLabel.setBounds(20, 30, 70, 20); 
    mainContentLayeredPane.add(colourLabel, JLayeredPane.DEFAULT_LAYER); 

    comboBox = new JComboBox(); 
    comboBox.setSize(100, 20); 
    mainContentLayeredPane.add(comboBox, JLayeredPane.DEFAULT_LAYER); 
} 

public void setComboBox(String[] list) { 
    comboBox.setModel(new DefaultComboBoxModel()); 
    for (Object item : list) { 
     comboBox.addItem(item); 
    } 
} 
} 

public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable(){ 
     @Override 
     public void run() { 
      MyApp app = new MyApp(); 
      app.setVisible(true); 
      app.setSize(600, 600); 
      app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
    }); 
} 
} 
package example; 

import java.util.ListIterator; 

public class Controller { 

private ColourView colourView; 
ListIterator<String> litr; 
String listData[] = {"Item 1", "Item 2", "Item 3", "Item 4"}; 

Controller(ColourView colourView) { 
    this.colourView = colourView;; 
} 

public void getListData() { 
    colourView.setComboBox(listData); 
} 
} 

回答

2

你必須的元素添加到ComboboxModel這樣的:

// define model 
DefaultComboBoxModel model; 
... 

public void setComboBox(String[] list) { 
    model = new DefaultComboBoxModel(list); 
    comboBox.setModel(model); 
} 

注意:如果你想修改的元素,你必須重新修改模型,而不是在ComboBox本身。

+0

謝謝。我認爲我需要從構造函數調用這個來填充應用程序加載時。 – user1783462 2013-03-22 11:59:37

+0

您也可以在運行期間更改模型。但我認爲最好的方法是使用可用數據在啓動時(在構造函數中)初始化模型。如果數據在初始化後出現,您仍可以添加/刪除模型中的數據。 – MalaKa 2013-03-22 12:02:56