2017-06-21 65 views
0

我试图创建一个简单的程序,它接受JTextArea中的输入,然后将其放入JList(当按下焦点的JTextArea时按下)。问题是当文本被保存在Model类的ArrayList中时,它在JList中不可见。一个修复将不胜感激。如何对JList中的模型显示进行更改

主要类:

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方法会解决我的问题,但事实并非如此。也许我没有正确使用它们?

+0

..................您好吗?请让我们知道,如果答案帮助/解决了您的问题。 –

+0

你为什么要创建一个自定义ListModel?只需使用DefaultListModel。 – camickr

回答

1

你拍摄自己的脚,此代码:

@Override 
public void addListDataListener(ListDataListener l) { } 

@Override 
public void removeListDataListener(ListDataListener l) { } 

AbstractListModel上已经有了这些方法,并通过重写它们,你要阻止视图(您的JList)从倾听和响应模型中的变化。删除这些空方法,或从它们中调用super的方法,并且您的代码应该工作。