Не можете добавить в мой 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. Я думаю, что это ключевые моменты, чтобы заставить его работать.