Как определить объект для сопоставления с классом Controleur из класса GUI? - PullRequest
1 голос
/ 27 октября 2019

Я новичок в JavaFX и не могу установить обработчик событий для кнопок в классе Controleur, который должен манипулировать с Contructor of Controleur vue и modele.

Вопрос, как я могу создать объект в графическом интерфейсе класса, чтобы он соответствовал конструктору Controleur в классе Controleur?

Любая помощь будет полезна.

Вот мой класс GUI :

public class GUI extends Application implements IView{

     TextField textfield1, textfield2, textfield3, textfield4, textfield5;

     Button button0, button1, button2, button3, button4, button5, button6, button7, button8, button9;

     Button button_add,button_sub,button_div,button_mult,button_virgule,button_neg,button_push,button_clear,button_backspace;



        // TODO Auto-generated method stub
        @Override
        public void start(Stage primaryStage) throws Exception {
            // TODO Auto-generated method stub

            AnchorPane anchorPane= new AnchorPane();
            //error place as i have no idea to create object controleur with parameter vue and modele
            Controleur controleur=new Controleur();
            Scene sc = new Scene(anchorPane, 400.0, 375.0);
            primaryStage.setTitle("Ma calculette");
            primaryStage.setScene(sc);
            primaryStage.show(); 


            textfield1= new TextField();
            textfield1.setPrefHeight(27.0);
            textfield1.setPrefWidth(400.0);
            textfield1.setLayoutY(109.0);
            textfield1.setEditable(false);
            textfield1.setAlignment(Pos.CENTER_RIGHT);
            textfield1.setId("textfield1");
            anchorPane.getChildren().add(textfield1);

            textfield2= new TextField();
            textfield2.setPrefHeight(27.0);
            textfield2.setPrefWidth(400.0);
            textfield2.setLayoutY(82.0);
            textfield2.setEditable(false);
            textfield2.setAlignment(Pos.CENTER_RIGHT);
            textfield2.setId("textfield2");
            anchorPane.getChildren().add(textfield2);

            button7 = new Button("7");
            button7.setPrefHeight(34.0);
            button7.setPrefWidth(82.0);
            button7.setLayoutY(207.0);
            button7.setLayoutX(21.0);
            button7.setMnemonicParsing(false);
            button7.setId("seven");
            //button7.setOnAction(handle);
            anchorPane.getChildren().add(button7);

            button4 = new Button("4");
            button4.setPrefHeight(34.0);
            button4.setPrefWidth(82.0);
            button4.setLayoutY(241.0);
            button4.setLayoutX(21.0);
            button4.setMnemonicParsing(false);
            //button4.setOnAction(handle);
            button4.setId("four");
}

и вот мой класс Controleur :

public class Controleur implements ActionListener{

  GUI vue;
  Accumulateur modele;

  public Controleur(GUI vue, Accumulateur modele) {
      this.vue=vue;
      this.modele=modele;

  }


    @Override
    public void actionPerformed(ActionEvent event) {
        // TODO Auto-generated method stub
        if(vue.textfield1.getText().isEmpty() || modele.pile.empty()) {
            if (event.getSource() == vue.button1) {
                vue.textfield1.setText(vue.textfield1.getText()+ "1");
           }else if (event.getSource() == vue.button2) {
                vue.textfield1.setText(vue.textfield1.getText() + "2");
           }else if (event.getSource() == vue.button3) {
                vue.textfield1.setText(vue.textfield1.getText() + "3");
           }else if (event.getSource() == vue.button4) {
                vue.textfield1.setText(vue.textfield1.getText() + "4");
           }else if (event.getSource() == vue.button5) {
                vue.textfield1.setText(vue.textfield1.getText() + "5");
           }else if (event.getSource() == vue.button6) {
                vue.textfield1.setText(vue.textfield1.getText() + "6");
           }else if (event.getSource() == vue.button7) {
                vue.textfield1.setText(vue.textfield1.getText() + "7");
           }else if (event.getSource() == vue.button8) {
                vue.textfield1.setText(vue.textfield1.getText() + "8");
           }else if (event.getSource() == vue.button9) {
                vue.textfield1.setText(vue.textfield1.getText() + "9");
           }else if (event.getSource() == vue.button0) {
                vue.textfield1.setText(vue.textfield1.getText() + "0");   
           }else if (event.getSource() == vue.button_virgule) {
               if(!vue.textfield1.getText().contains(".")) {
                  vue.textfield1.setText(vue.textfield1.getText() + ".");   
              }else {
                   }
           }else if (event.getSource() == vue.button_push) {
               modele.pile.push(Double.parseDouble(vue.textfield1.getText()));
           }else if (event.getSource() == vue.button_backspace) {
               if(!vue.textfield1.getText().isEmpty()) {
                  vue.textfield1.setText(""+vue.textfield1.getText().substring(0, vue.textfield1.getText().length() - 1));
               }else {                     
               }
           }
    }

1 Ответ

0 голосов
/ 27 октября 2019

JavaFX включает в себя EventHandler, поэтому вам не нужно использовать библиотеки awt. Кроме того, вы объявили экземпляр Controleur, но ничего не упомянули в качестве аргумента, поэтому будет ошибка компиляции. Do next В классе Gui:

Controleur controleur = new Controleur(this);
button.setOnAction(controleur);

В классе Controleur:

Gui parent;
Accumulator accumulator;
public Controleur(Gui parent){
 this.parent = parent;
 accumulator = new Accumulator ();
}
public void handle(Event event){
 Object ob = event.getSource();
  //here we communicate through reference parent
  if(ob == parent.button){
   String data = parent.textField.getText();
  // here we add value to list in Accumulator class through accumulator reference 
   accumulator.list.add(data);
 }
}

В классе Accumulator (модель):

List list;
Accumulator (){
 list = new ArrayList();
}

Когда вы нажимаете кнопку, через ссылку класса Controleur parent она спрашивает контроллер, какая кнопка была нажата? Затем, через эталонный аккумулятор, в зависимости от того, какая кнопка была нажата, контроллер передает значение через аккумулятор в список в классе Accimulator (который является моделью) для сохранения данных в списке. Вот как вы можете передать значение из графического интерфейса в контроллер в модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...