Не можете добавить в мой JList?

У меня есть класс с именем PlaceCategory, у которого есть имя и цвет. И когда я хочу создать новую PlaceCategory, я сначала ввожу ее название, а затем выбираю цвет. Они сохраняются в строку и цвет. И когда я закончу, я создаю новый объект с этими настройками, а затем хочу добавить его в свой JList, но он не работает, я получаю эту ошибку "Метод add(Component) в типе Container не применим для аргументов (PlaceCategory)"вот мой код

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 ответ

Решение

С помощью метода add(Component) вы пытаетесь добавить новый (графический) компонент. Этот метод полезен, если у вас есть JPanel. Но вы хотите добавить новый элемент списка в свой JList.

Вы должны понимать, как работать с моделями в Swing. Они представляют данные ваших Компонентов. С вашим конструктором, использованным для нового JList в предоставленной программе, вы создаете немодифицируемую модель. Это означает, что вы не можете добавлять новые элементы.

Вы должны установить модель для JList, который имеет метод, подобный addElement. К счастью для вас, Swing предоставляет такую ​​модель. Он называется DefaultListModel. Я думаю, что это ключевые моменты, чтобы заставить его работать.

Другие вопросы по тегам