1

MVC を使用して単純な JList を実装しようとしています。基本的に、JList を表示し、その下にアイテムを削除するボタンを追加します。モデルに AbstractListModel を使用したいのは、後でデータとして単純な ArrayList 以上のものを必要とするためです。

JList を適切な MVC の方法で使用するのに問題があります。たとえば、ビューでリストを作成します。しかし、このリストにはモデル (addModel(method)) が必要であり、ビューに追加されます。MVC ではビューにモデルの知識がないと思っていたので、奇妙に思えます。また、コントローラーに何を入れるべきか本当にわかりません。 .

とにかく、誰かがこれを実装するためのガイドラインを教えてくれたらいいのにと思います。

これが私が始めたコードです:

public class SimpleJlist extends JFrame
{
    public static void main(String[] args)
    {
        Controller controller = new Controller();
        View view = new View(controller);
        Model model = new Model();

        SimpleJlist jl = new SimpleJlist();

        jl.setLayout(new FlowLayout());
        jl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jl.add(view);

        jl.setVisible(true);
        jl.pack();

    }
}

public class View extends JPanel implements ListDataListener, ActionListener
{
    Controller controller;
    JButton button;
    JList list;

    public View(Controller controller)
    {
        this.controller = controller;
        button = new JButton("Delete");

        /* Creation of the Jlist, but need the model. */

    }

    /* For the button */
    public void actionPerformed(ActionEvent event) { }
    /* For the list */
    public void contentsChanged(ListDataEvent event) { }
    public void intervalAdded(ListDataEvent event) { }
    public void intervalRemoved(ListDataEvent event) { }

}

public class Model extends AbstractListModel 
{
    private ArrayList<String> names;

    public Model()
    {
        names = new ArrayList<String>();
        /* add names... */
    }

    public void deleteElement(int index) { names.remove(index); }
    public String getElementAt(int index) { return names.get(index); }
    public int getSize() { return names.size(); }
}

コードは明らかに完全ではありませんが、これは、次に何をすべきかを考える前に私がたどり着いた場所についてです...

何を入れればいいのかわからないので、コントローラーはありません。

4

1 に答える 1

1

MVC を使用して単純な JList を実装しようとしています。

Swing コンポーネントは、すでに MVC のようなスタイルで設計されています。コンポーネントを使用するだけです。LIstModel はモデルであり、JList は結合されたビュー コントローラーです。Model-View-Controller と呼ばれる追加のクラスは作成しません。

基本的に、JList を表示し、その下にアイテムを削除するボタンを追加します。

DefaultListModel からアイテムを追加/削除する方法の例については、リストの使用方法に関する Swing チュートリアルのセクションを参照してください。

モデルに AbstractListModel を使用したいのは、後でデータとして単純な ArrayList 以上のものを必要とするからです。

これで問題ありません。モデルを置き換えるだけです。データが変更されたときにモデルが適切な fireXXX() メソッドを呼び出すと仮定すると、これを行うときに JList に変更を加える必要はありません。

モデルの使用方法に関する Swing チュートリアルのセクションも参照してください。このセクションでは、独自のカスタム コンポーネントに MVC アプローチを使用する方法を示しています。

于 2013-10-31T18:26:55.983 に答える