Перенос данный в Label

112
03 августа 2019, 09:30

Пишу игру "Быки и Коровы", думаю все ее знают, но вот - правила. В коде много недоработок, но в целом все работает. Сейчас у меня есть два массива которые сравнивают элементы и выдают (пока в консоле) все совпадения, а хочется выводить всю информацию в поля Label, я недопонимаю как пользоваться гетарами и сетарами что бы правильно переносить всю информацию, помогите мне пожалуйста, хотя бы объяснением на каком-то примере как это делается. Сейчас я создал 10 Label, т.к. хочу ограничиться 10-ю ходами, ввожу число в TextField, нажимаю кнопку принять и происходит сравнение, но после нажатия, хочу, что бы прописывались быки и которы в Лейблах (ход1 потом ход2 и т.д.) Помогите пожалуйста.

Основной класс мейн

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
    private Stage menu;
    private BorderPane wind;
    public Main() {
    }
    /**
     * Инициализирует menuBar.
     */
    public void initMenuBar() {
        try {
            // Загружаем корневой макет из fxml файла.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("view/fxml/menuBar.fxml"));
            wind = loader.load();
            // Отображаем сцену, содержащую корневой макет.
            Scene scene = new Scene(wind);
            menu.setScene(scene);
            menu.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * Загружает в корневой макет mainWindow.
     */
    public void initWindow() {
        try {
            // Загружаем сведения об адресатах.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("view/fxml/window.fxml"));
            AnchorPane personOverview = loader.load();
            // Помещаем сведения в центр корневого макета.
            wind.setCenter(personOverview);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        this.menu = primaryStage;
        this.menu.setTitle("Быки и коровы");
        initMenuBar();
        initWindow();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Его контроллер

package model.ControllerClass;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import model.Data;
import model.Util;
import java.util.Arrays;
public class MainController {
    private int[] enterNumber;   //вводимое число
    private int[] randomNumber;  //загаданное число компьютером
    int bulls;  //число коров
    int cows;   //число быков
    private Data data;
    @FXML
    private Label label1;
    @FXML
    private Label label2;
    @FXML
    private Label label3;
    @FXML
    private Label label4;
    @FXML
    private Label label5;
    @FXML
    private Label label6;
    @FXML
    private Label label7;
    @FXML
    private Label label8;
    @FXML
    private Label label9;
    @FXML
    private Label label10;
    @FXML
    private Label finishLabel;
    @FXML
    private Button StartGameButton;
    @FXML
    private Button ExitGameButton;
    @FXML
    private TextField enterNumberField;
    @FXML
    private Button enterNumberButton;
    @FXML
    void initialize() {
        showDataDetails(null);
        ExitGameButton.setOnAction(event -> {
            System.exit(0);
        });
        enterNumberButton.setOnAction(event -> {
            String number = enterNumberField.getText();
            enterNumber = Arrays.stream(number.split("")).mapToInt(Integer::parseInt).toArray();
            System.out.println("Массив строк - " + Arrays.toString(enterNumber));
            if (randomNumber == null) {
                randomNumber = Util.randInt(1234, 9876);
            }
            System.out.println("Рандомное число" + Arrays.toString(randomNumber));
            bulls = 0;
            cows = 0;
            for (int i = 0; i < enterNumber.length; i++) {
                for (int i2 = 0; i2 < randomNumber.length; i2++) {
                    if (i == i2) {
                        if (randomNumber[i] == enterNumber[i2]) {
                            bulls++;
                        }
                    } else
                    if (randomNumber[i] == enterNumber[i2]) {
                        cows++;
                    }
                }
            }
            System.out.println("Быков - " + bulls);
            System.out.println("Коровы - " + cows);
            setData(data);
            if (bulls == 4) {
                System.out.println("Победа");
            }
        });
    }
    /**
     * Отвечает за отображение хода игрока
     * @param data
     */
    private void showDataDetails(Data data) {
        if (data != null) {
            // Заполняем метки информацией из объекта data.
            label1.setText(data.getMove1());
            label2.setText(data.getMove2());
            label3.setText(data.getMove3());
            label4.setText(data.getMove4());
            label5.setText(data.getMove5());
            label6.setText(data.getMove6());
            label7.setText(data.getMove7());
            label8.setText(data.getMove8());
            label9.setText(data.getMove9());
            label10.setText(data.getMove10());
            finishLabel.setText(data.getFinish());
        } else {
            // Если Data = null, то убираем весь текст.
            label1.setText("");
            label2.setText("");
            label3.setText("");
            label4.setText("");
            label5.setText("");
            label6.setText("");
            label7.setText("");
            label8.setText("");
            label9.setText("");
            label10.setText("");
            finishLabel.setText("");
        }
    }
    private void setData (Data data) {
        this.data = data;

    }
}

Класс в гетарами и сетарами

import javafx.beans.property.StringProperty;
public class Data {
    private StringProperty move1;
    private StringProperty move2;
    private StringProperty move3;
    private StringProperty move4;
    private StringProperty move5;
    private StringProperty move6;
    private StringProperty move7;
    private StringProperty move8;
    private StringProperty move9;
    private StringProperty move10;
    private StringProperty finish;

    public Data() {
    }
    public String getFinish() {
        return finish.get();
    }
    public void setFinish(String finish) {
        this.finish.set(finish);
    }
    public String getMove1() {
        return move1.get();
    }
    public void setMove1(String move1) {
        this.move1.set(move1);
    }
    public String getMove2() {
        return move2.get();
    }

    public void setMove2(String move2) {
        this.move2.set(move2);
    }
    public String getMove3() {
        return move3.get();
    }
    public void setMove3(String move3) {
        this.move3.set(move3);
    }
    public String getMove4() {
        return move4.get();
    }
    public void setMove4(String move4) {
        this.move4.set(move4);
    }
    public String getMove5() {
        return move5.get();
    }
    public void setMove5(String move5) {
        this.move5.set(move5);
    }
    public String getMove6() {
        return move6.get();
    }
    public void setMove6(String move6) {
        this.move6.set(move6);
    }
    public String getMove7() {
        return move7.get();
    }
    public void setMove7(String move7) {
        this.move7.set(move7);
    }
    public String getMove8() {
        return move8.get();
    }
    public void setMove8(String move8) {
        this.move8.set(move8);
    }
    public String getMove9() {
        return move9.get();
    }
    public void setMove9(String move9) {
        this.move9.set(move9);
    }
    public String getMove10() {
        return move10.get();
    }
    public void setMove10(String move10) {
        this.move10.set(move10);
    }
}

Утилитный класс где получаю рандомное число

import java.util.Random;
public class Util {
    public static int[] randInt(int min, int max) {
        Random random = new Random();
        int randomNum;
        int [] arr;
        do {
            randomNum = random.nextInt((max - min) + 1) + min;
            String s = Integer.toString(randomNum);
            arr = new int[s.length()];
            for (int i = s.length() - 1; i >= 0; i--) {
                arr[i] = randomNum % 10;
                randomNum /= 10;
            }
        } while (arr[0] == arr[1] || arr[0] == arr[2] || arr[0] == arr[3] ||
                arr[1] == arr[2] || arr[1] == arr[3] || arr[2] == arr[3]);
        return arr;
    }
}

И FXML класс

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="model.ControllerClass.MainController">
   <children>
      <BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="300.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <center>
            <SplitPane dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0" BorderPane.alignment="CENTER">
              <items>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" style="-fx-background-color: #FEFCE1;">
                     <children>
                        <TextField fx:id="enterNumberField" alignment="CENTER" layoutX="15.0" layoutY="85.0" prefHeight="25.0" prefWidth="171.0" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0">
                           <font>
                              <Font size="14.0" />
                           </font>
                        </TextField>
                        <Label alignment="CENTER" layoutX="15.0" layoutY="14.0" prefHeight="63.0" prefWidth="166.0" text="Введите четырехзначное число, символы в котором не повторяются" textAlignment="CENTER" wrapText="true" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0">
                           <font>
                              <Font size="13.0" />
                           </font>
                        </Label>
                        <Button fx:id="enterNumberButton" layoutX="72.0" layoutY="128.0" mnemonicParsing="false" text="Принять" AnchorPane.leftAnchor="65.0" AnchorPane.rightAnchor="65.0" />
                     </children></AnchorPane>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" style="-fx-background-color: E1FEF6;">
                     <children>
                        <Label fx:id="label1" layoutX="14.0" layoutY="14.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0" />
                        <Label fx:id="label2" layoutX="15.0" layoutY="55.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label3" layoutX="15.0" layoutY="96.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label4" layoutX="15.0" layoutY="137.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label5" layoutX="15.0" layoutY="178.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label6" layoutX="15.0" layoutY="219.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label7" layoutX="15.0" layoutY="260.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label8" layoutX="15.0" layoutY="301.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label9" layoutX="15.0" layoutY="342.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="label10" layoutX="15.0" layoutY="383.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                        <Label fx:id="finishLabel" layoutX="15.0" layoutY="453.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
                     </children></AnchorPane>
              </items>
            </SplitPane>
         </center>
         <bottom>
            <GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="40.0" prefWidth="600.0" BorderPane.alignment="CENTER">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <Button fx:id="StartGameButton" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Играть" />
                  <Button fx:id="ExitGameButton" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Выход" GridPane.columnIndex="1" />
               </children>
            </GridPane>
         </bottom>
      </BorderPane>
   </children>
</AnchorPane>

FXML менюбар

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="430.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <MenuBar BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
</BorderPane>
Answer 1

Реализовать это можно по-разному. Можете сделать так, чтобы вся логика обрабатывалась внутри кнопки и там же вносить всё в метки.

Геттер - это метод возвращающий значение некоего свойства класса, а сеттер соответственно то что устанавливает свойство класса. Пример:

public class MyClass {
   private String name; //свойство
   public String getName() { //геттер
      return this.name;
   }
   public void setName(String name) { //сеттер 
      this.name=name;
   }
}
READ ALSO
Как обрабатывать отрицательные параметры даты для LocalDateTime в JAVA?

Как обрабатывать отрицательные параметры даты для LocalDateTime в JAVA?

В JS при создании даты из получаемых извне чисел, при передаче отрицательных значений:

101
Как отменить данное свойство CSS?

Как отменить данное свойство CSS?

И везде так и требуетсяНо как быть если в одном месте мне надо что бы SVG имел тот же fill что и в документе ( там градиент поэтому задать через...

135
Удаление элемента при условии ООП js

Удаление элемента при условии ООП js

При запуске у нас есть 10 шаровКогда мы кликаем, то спауним новый шар

157