4

私はJavaの学生で、小さなコマンドラインカードゲームの基本的な機能を終了しました。ゲームはマジックタイプのトレーディングカードゲームの簡易版です。AIはありません。自分自身または他の人間のプレイヤーと対戦します。

この時点で、MVCを使用してGUIを追加しようとしていますが、ボタンにMouseListenerを追加する際に問題が発生しています

これは何が起こっているのかについての簡単な説明です:

  • スーパークラスの継承によってModel拡張されるクラスがありますObservable
  • を実装するViewクラスObserver
  • そして、Controller拡張するクラスMouseAdapter

それから私はすべてをまとめました:

....

View view = new View();
Model model = new Model();

model.addObserver( view );

Controller controller = new Controller();
// associate Controller's Model and View objects
controller.addModel(model);
controller.addView(view);

view.addController(controller); // i try to add the MouseListener

....

ViewのaddController()メソッドは次のとおりです。

public void addController(Controller controller){
            this.myButton.addMouseListener( controller )
}

メソッドが呼び出されていること(その中の何かをprintln)をすでに確認しaddController()ましたが、何らかの理由でリスナーが設定されていませんmouseReleased()。ボタンをクリックしても呼び出されません。

私が見落としているかもしれない考えやステップはありますか?感謝。

編集(コントローラーコード):

public class Controller extends MouseAdapter {

    Model model;
    View view;

    public void addModel(Model m){
            this.model = m;
    }

    public void addView(View ui){
            this.view = ui;
    }

    // All @Overrides

    @Override
    public void mouseReleased(MouseEvent me) {
        System.out.println("oh, it arrived");
    }
}
4

1 に答える 1

4

あなたは何か間違ったことをしているに違いありませんが、私はコードなしでは何も言えません。これが機能するいくつかの簡単なコードです(多分それはあなたが間違っていることを理解するのを助けることができます):

    import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test1 extends JFrame {

    public Test1() {
        initUI();
    }

    private void initUI() {
        JPanel container = new JPanel();
        container.setLayout(new BorderLayout());
        container.setBackground(Color.black);

        JButton b = new JButton("test");
        b.addMouseListener(new Controller());
        container.add(b);

        add(container);
        pack();

    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Test1 c = new Test1();
                c.setVisible(true);
            }
        });
    }

    class Controller extends MouseAdapter {
        @Override
        public void mouseReleased(MouseEvent me) {
            System.out.println("oh, it arrived");
        }
    }

}
于 2012-11-04T10:47:19.027 に答える