Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVC AddActionListener不';行不通_Java_Model View Controller_Actionlistener_Frame - Fatal编程技术网

Java MVC AddActionListener不';行不通

Java MVC AddActionListener不';行不通,java,model-view-controller,actionlistener,frame,Java,Model View Controller,Actionlistener,Frame,正如标题上所说,我在一个项目上遇到了一个问题,我们不得不使用MVC模式来实现游戏“柯尔特快车”。现在再返回它已经太晚了,但我不明白我的代码哪里出了问题 为了给你一个游戏的想法,有一辆四轮马车在每一个有一个屋顶。有些匪徒可以移动、射击或举起马车和屋顶上的财宝。还有一种警长,每当他看到歹徒(如果在同一辆马车或屋顶上,同一个位置)就会移动并开枪 行动的过程是特别的,有两个阶段,第一个阶段,第一个匪徒通过点击相关按钮选择固定数量的行动,然后第二个阶段等等 这里是第二阶段,第一个匪徒的第一个动作是在点击动

正如标题上所说,我在一个项目上遇到了一个问题,我们不得不使用MVC模式来实现游戏“柯尔特快车”。现在再返回它已经太晚了,但我不明白我的代码哪里出了问题

为了给你一个游戏的想法,有一辆四轮马车在每一个有一个屋顶。有些匪徒可以移动、射击或举起马车和屋顶上的财宝。还有一种警长,每当他看到歹徒(如果在同一辆马车或屋顶上,同一个位置)就会移动并开枪

行动的过程是特别的,有两个阶段,第一个阶段,第一个匪徒通过点击相关按钮选择固定数量的行动,然后第二个阶段等等 这里是第二阶段,第一个匪徒的第一个动作是在点击动作按钮时完成的,然后第二个匪徒的一个接一个的点击,正如你可以看到的那样,每个动作按钮点击只会发生一个动作。之后,其他操作也会执行相同的操作

当我单击时,什么也没有发生,我输入了一个“System.out.println”(“nothing work”),但它不会在单击时打印任何内容。使用setActionCommand()我将一个字符串关联到方法AddActionListener(ActionListener aclick)上的每个按钮 并在类Controleur上实例化,并根据需要创建一个actionPerformed方法(ActionListener aclick),该方法根据使用getActionCommand单击时获得的字符串执行某些操作

这里有一个与我的问题有关的课程:

public class VueBoutons extends JPanel {

Direction dir;

JButton Action = new JButton("Action !");
JButton Avance = new JButton("Avancer");
JButton Recule = new JButton("Reculer");
JButton Monte = new JButton("Monter");
JButton Descend = new JButton("Descendre");
JButton Braque = new JButton("Braquer");
JButton TirHaut = new JButton("TirHaut");
JButton TirBas = new JButton("TirBas");
JButton TirDroite = new JButton("TirDroit");
JButton TirGauche = new JButton("TirGauche");

public VueBoutons() {


    this.add(Action);
    this.add(Avance);
    this.add(Recule);
    this.add(Monte);
    this.add(Descend);
    this.add(Braque);
    this.add(TirHaut);
    this.add(TirBas);
    this.add(TirDroite);
    this.add(TirGauche);

    disableboutAction(); // Au début on ne peut pas cliquer sur Action ! }

public void addActionListener(ActionListener e) {

    Action.setActionCommand("10");
    Action.addActionListener(e);

    Avance.setActionCommand("1");
    Avance.addActionListener(e);

    Recule.setActionCommand("2");
    Recule.addActionListener(e);

    Monte.setActionCommand("3");
    Monte.addActionListener(e);

    Descend.setActionCommand("4");
    Descend.addActionListener(e);

    Braque.setActionCommand("5");
    Braque.addActionListener(e);

    TirHaut.setActionCommand("6");
    TirHaut.addActionListener(e);

    TirBas.setActionCommand("7");
    TirBas.addActionListener(e);

    TirDroite.setActionCommand("8");
    TirDroite.addActionListener(e);

    TirGauche.setActionCommand("9");
    TirGauche.addActionListener(e);

}

public void disableActions() {
    Avance.setEnabled(false);
    Recule.setEnabled(false);
    Monte.setEnabled(false);
    Descend.setEnabled(false);
    TirHaut.setEnabled(false);
    TirBas.setEnabled(false);
    TirGauche.setEnabled(false);
    TirDroite.setEnabled(false);
    Braque.setEnabled(false);
}

public void disableboutAction() {
    Action.setEnabled(false);
}

public void enableActions() {
    Avance.setEnabled(true);
    Recule.setEnabled(true);
    Monte.setEnabled(true);
    Descend.setEnabled(true);
    TirHaut.setEnabled(true);
    TirBas.setEnabled(true);
    TirGauche.setEnabled(true);
    TirDroite.setEnabled(true);
    Braque.setEnabled(true);
}

public void enableboutAction() {
    Action.setEnabled(true);
}

public void disableTout() {
    Avance.setEnabled(false);
    Recule.setEnabled(false);
    Monte.setEnabled(false);
    Descend.setEnabled(false);
    TirHaut.setEnabled(false);
    TirBas.setEnabled(false);
    TirGauche.setEnabled(false);
    TirDroite.setEnabled(false);
    Braque.setEnabled(false);
    Action.setEnabled(false);
}}
二等舱:

public class Controleur {

private int a;
private int numj;
private int numact;

private Modele modele;
private VueInterface vueI;

public Controleur(Modele modele, VueInterface vueI) {
    System.out.println("work");
    this.numj = 0;
    this.numact = 0;
    this.modele = modele;

    this.vueI = new VueInterface(modele);

    vueI.getCommandes().addActionListener(new CActionListener());
    // Instancie l'équivalent de la classe "Controleur" de Conway
    // de sorte à avoir une classe séparé et non pas interne
}

class CActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        a = Integer.parseInt(e.getActionCommand());
        System.out.println("It doesn't even work until here...............");

        if (modele.getPhaseP() && !modele.getPhaseA() && a <= Direction.values().length * 2) {
            // Cf classe Modele méthode uneAction() pour la condition

            modele.getListBandits().get(numj).ajouteAction(a);

            if (numact < modele.getNbactions())
                ++numact;

            else if (numj < modele.getNbjoueurs()) {
                numact = 0;
                ++numj;
            } else {
                numj = 0;
                numact = 0;
                System.out.println("******** Fin de la phase de planification ********");
                vueI.getCommandes().disableActions();
                vueI.getCommandes().enableboutAction();
                modele.setPhaseP(false);
                modele.setPhaseA(true);
            }
        } else if (modele.getPhaseA() && !modele.getPhaseP()) {

            if(a == 10) {
                modele.uneAction(numj, numact);

                if(numj < modele.getNbjoueurs()) // On fait toutes les 1res  actions de chaque joueurs etc
                    ++numj;
                else if (numact < modele.getNbactions()) {
                    numj = 0;
                    ++numact;
                } else {
                    modele.setPhaseP(false);
                    modele.setPhaseA(false);
                }

            }
        }

    }

}}

谢谢你的帮助!!

在我看来,在你的
Controleur
的构造函数中有两个
vueI

this.vueI = new VueInterface(modele);
vueI.getCommandes().addActionListener(new CActionListener());

这两行影响不同的
VueInterface
实例。

我看不到任何地方使用
Controleur
ActionListener
绑定到按钮此行:vueI.getCommandes().addActionListener(new CActionListener());(但我不确定你在说什么,我的母语不是英语,你在写!忘了更改了,谢谢!我还有一个问题,我会在这里再次发布,而不是创建新的帖子。我有两个可观察的类和观察者如果你曾经使用过MVC,你可能知道它是什么,但是通过调用我的NotifyObservators();在一个动作之后,什么都没有发生,我的网格布局没有改变。如果它有帮助并解决了你的问题,你应该接受这个答案。
this.vueI = new VueInterface(modele);
vueI.getCommandes().addActionListener(new CActionListener());