Java 如何在JList中更改模型显示

Java 如何在JList中更改模型显示,java,swing,jpanel,jtextarea,jlist,Java,Swing,Jpanel,Jtextarea,Jlist,我试图创建一个简单的程序,它在JTextArea中获取输入,然后在使用JTextArea按enter键时将其放入JList中。问题是,虽然文本保存在Model类的ArrayList中,但它在JLList中不可见。如能修复,将不胜感激 主要类别: public class Main { public static void main(String[] args) { Model model = new Model(); JFrame frame = new JFr

我试图创建一个简单的程序,它在JTextArea中获取输入,然后在使用JTextArea按enter键时将其放入JList中。问题是,虽然文本保存在Model类的ArrayList中,但它在JLList中不可见。如能修复,将不胜感激

主要类别:

 public class Main {

  public static void main(String[] args) {

      Model model = new Model();
      JFrame frame = new JFrame();
      JPanel panel = new JPanel(new BorderLayout());
      JTextField text = new JTextField();
      JList list = new JList(model);
      JScrollPane scroll = new JScrollPane(list);

      frame.setSize(300, 300);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);

      frame.add(panel);
      panel.add(scroll, BorderLayout.CENTER);
      panel.add(text, BorderLayout.PAGE_END);

      text.setText("Enter Text");

      frame.setVisible(true);

      text.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            model.add(text.getText());
        }
    });
模型类:

public class Model extends AbstractListModel{

    List<String> list = new ArrayList<>();

    @Override
    public int getSize() {
        return list.size();
    }

    @Override
    public Object getElementAt(int index) {
        return list.get(index);
    }

    @Override
    public void addListDataListener(ListDataListener l) { }

    @Override
    public void removeListDataListener(ListDataListener l) { }

    public void add(String x){
        int size = list.size();
        list.add(size, x);
        fireIntervalAdded(this, size, size);
    }

     void remove(int index) {
        list.remove(index);
        fireIntervalRemoved(this, index, index);
    }

我听说使用fireIntervalAdded和fireIntervalRemoved方法可以解决我的问题,但事实并非如此。也许我没有正确地使用它们?

您正在用以下代码攻击自己的脚:

@Override
public void addListDataListener(ListDataListener l) { }

@Override
public void removeListDataListener(ListDataListener l) { }

AbstractListModel已经有了这些方法,通过重写它们,您将阻止JList的视图侦听和响应模型中的更改。删除这些空方法,或者从其中调用super的方法,您的代码应该可以工作。

…..您好?请告诉我们答案是否帮助/解决了您的问题。您为什么要创建自定义列表模型?只需使用DefaultListModel。