私はこれでしばらく遊んでいますが、成功していません。ListModel を見てきましたが、現在のプロジェクトに実装するのに苦労しています。
Model の ArrayList に要素を追加する Producer クラス スレッドがあります。これは正常に機能し、ArrayList は実行時に更新されています。私の問題は、ArrayList に追加された新しいオブジェクトを View クラスの JList に追加することです。ListModel または DefaultListModel を現在の設定に組み込む方法がわかりません。大変助かりました。
public class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return this.name;
}
}
public class Producer extends Thread
{
private Model model;
public Producer(Model model)
{
this.model = model;
}
public void run()
{
Person fred = new Person("Fred Flintstone", 37);
Person wilma = new Person("Wilma Flintstone", 18);
Person pebbles = new Person("Pebbles Flintstone", 15);
Person dino = new Person("Dino Flintstone", 45);
Person barney = new Person("Barney Rubble", 76);
Person betty = new Person("Betty Rubble", 76);
Person bamm = new Person("Bamm-Bamm Rubble", 76);
try
{
model.addPerson(fred);
Thread.sleep(1500);
model.addPerson(wilma);
Thread.sleep(1500);
model.addPerson(pebbles);
Thread.sleep(1500);
model.addPerson(dino);
Thread.sleep(1500);
model.addPerson(barney);
Thread.sleep(1500);
model.addPerson(betty);
Thread.sleep(1500);
model.addPerson(bamm);
}
catch(Exception e)
{
System.out.println("Error adding Person object to Model.people
ArrayList" + e);
}
}
}
public class Model
{
private List <Person> people;
public Model()
{
people = new ArrayList<Person>();
}
public List<Person> getPeople()
{
return people;
}
public void addPerson(Person aPerson)
{
people.add(aPerson);
System.out.println("Person object added to people list:" + aPerson);
}
public void removePerson(Person aPerson)
{
people.remove(aPerson);
}
}
public class View extends JFrame
{
private JPanel topPanel, botPanel;
private JList peopleList;
private JScrollPane scrollPane;
private Model model;
public View(Model model)
{
this.model = model;
setSize(200, 220);
setTitle("View");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
topPanel = new JPanel();
botPanel = new JPanel();
peopleList = new JList(model.getPeople().toArray());
scrollPane = new JScrollPane(peopleList);
topPanel.setLayout(new GridLayout(1, 1));
topPanel.add(scrollPane);
topPanel.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "People list"));
Container cp = getContentPane();
cp.add(topPanel, BorderLayout.NORTH);
cp.add(botPanel, BorderLayout.SOUTH);
}
}
public class Main
{
public static void main(String[] args)
{
Model model = new Model();
View theView = new View(model);
theView.setVisible(true);
Producer producer = new Producer(model);
producer.start();
}
}