2015-04-28 62 views
0

我有一個名爲PlaceCategory的類,它有一個名稱和一個顏色。當我想創建一個新的PlaceCategory時,首先輸入它的名稱,然後選擇一種顏色。它們被保存爲字符串和顏色。當我完成後,我用這些設置創建一個新的對象,然後我想將它添加到我的JList,但它不工作,我得到這個錯誤「類型Container中的方法add(Component)不適用對於參數(PlaceCategory)」這裏是我的代碼無法添加到我的JList?

class NewCatLis implements ActionListener{ 
public void actionPerformed(ActionEvent ave){ 
    String categoryName; 
    Color color = Color.BLACK; 

    categoryName = JOptionPane.showInputDialog(MapProgram.this, "Name on category"); 
    color = JColorChooser.showDialog(MapProgram.this,"Chooser color", color); 
    PlaceCategory pc = new PlaceCategory(categoryName, color); 
    categoryList.add(pc); 


} 

} 

這裏是我的JList

private JList<PlaceCategory> categoryList; 

MapProgram(){ 
super("map"); 

PlaceCategory[] category = {new PlaceCategory("Tunnelbana", Color.GREEN)}; 

categoryList = new JList<PlaceCategory>(category); 
categoryList.setVisibleRowCount(3); 
categoryList.setFixedCellWidth(50); 
east.add(new JScrollPane(categoryList)); 
categoryList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

,這裏是我的PlaceCategory類:

import java.awt.*; 

public class PlaceCategory { 

private String name; 
public Color color; 



public PlaceCategory(String name, Color color){ 
    this.name = name; 
    this.color = color; 


} 

public String toString(){ 
    return name; 
} 

public Color getColor() { 

    return color; 
} 


} 
+1

https://docs.oracle.com/javase/tutorial/uiswing/components/list.html#mutable –

回答

5

使用添加(組件)您嘗試廣告的方法d新的(圖形)組件。如果你有一個JPanel,這個方法是有用的。但是你想添加一個新的列表元素到你的JList。

您必須瞭解如何在Swing中使用模型。它們代表組件的數據。在您提供的程序中使用您的構造函數來爲新的JList創建一個不可修改的模型。意思是你不能添加新的元素。

您必須將模型設置爲具有addElement等方法的JList。幸運的是,Swing提供了這樣的模型。它被命名爲DefaultListModel。我認爲這些是使其工作的關鍵點。

+0

好現在我已經這樣: 'DefaultListModel的DataModel =新DefaultListModel();'' JList的 categoryList = new JList <>(dataModel);' 但是當我嘗試addElement like'categoryList.addElement(pc);' 我得到這樣的錯誤:方法addElement(PlaceCategory) > –

+1

好吧,我現在開始工作:)謝謝!改變了,所以defaultlistmodel使用PlaceCategory而不是categorylist.addElement我用datamodel.addElement :) –