2017-06-21 5 views
0

JTextAreaで入力を受け取り、それをJListに配置する単純なプログラムを作成しようとしています。問題は、テキストが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()); 
     } 
    }); 

Modelクラス:

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)を防止している:あなたはこのコードを足で自分自身を撮影している

+0

..................こんにちは?答えがあなたの問題を助け/解決したかどうかお知らせください。 –

+0

カスタムListModelを作成する理由は何ですか?単にDefaultListModelを使用してください。 – camickr

答えて

1

モデルの変更。これらの空のメソッドを削除するか、そこからスーパーのメソッドを呼び出すと、コードが機能するはずです。

関連する問題