вводить данные из текстового поля в текстовое поле JAVAFX - NO FXML - PullRequest
0 голосов
/ 10 ноября 2019

Я пишу простой сетевой коммуникатор.

Вчера у меня была проблема со сменой сцен, но сегодня я не знаю, как nick из TextField класса A (Login.java) ввестив класс TextArea B (Messages.java) - в одном классе я могу это сделать, но не в двух разных

Login.java

public class Login {
    private GridPane grid;
    private Scene scene;
    private Text title;
    public Label nick;
    private Button wejdzBtn;
    public TextField userName;  

    public Login()  {
        grid = new GridPane();
        grid.setAlignment (Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25,25,25,25));
        scene = new Scene (grid, 300, 150);
        utworzBtn();
        utworzLogin();
        utworzTekst();
        utworzNick();               
    }

    public void utworzBtn() {
        wejdzBtn = new Button("Zaloguj si\u0119");
        HBox hbBtn = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn.getChildren().add(wejdzBtn);
        grid.add(hbBtn, 1, 2);
        wejdzBtn.setDisable(true);
        wejdzBtn.setOnAction(e -> {
            Messages mess = new Messages();
            Window w = scene.getWindow();
            if (w instanceof Stage) {
                Stage s = (Stage) w;
                s.setScene(mess.getScena());
            //    ((Stage) w).setResizable(true);
            }              
         });        
    }

    private void utworzLogin() {
        nick = new Label("Nick:");
        grid.add(nick, 0, 1);
    }

    public void utworzNick() {
        userName = new TextField();
        grid.add(userName,1,1);
        // informacja w polu tekstowym
        userName.setPromptText("Min 5, max 10 znak\u00f3w");
        userName.setFocusTraversable(false);

        //maksymalna ilość znaków
        final int maxLength = 10;
        final int minLength = 5;
        userName.setOnKeyTyped(t -> {
            if (userName.getText().length() > maxLength)
            {
                int pos = userName.getCaretPosition();
                userName.setText(userName.getText(0, maxLength));
                userName.positionCaret(pos);
            }//aktywacja lub dezaktywacja przycisku
            else if (userName.getText().length() >= minLength)
            {
                wejdzBtn.setDisable(false);
            }
            else if  (userName.getText().length() < minLength)
            {
                wejdzBtn.setDisable(true);
            }
        });
    }

    private void utworzTekst() {
        title = new Text ("Dzień dobry!");
        title.setFont(Font.font("Calibri", FontWeight.NORMAL, 20));
        grid.add(title, 0, 0, 2, 1);
    }

    public Scene okno() {
        return scene;
    }
}

Messages.java

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;

public class Messages {
    private AnchorPane anchorPane;
    private Scene scena;
    private Label pustaWiadomosc;
    private Button sendBtn;

    private TextArea poleDoWpisywania,poleDoWyswietlania, pobierzNick;

    public Messages() {
        anchorPane = new AnchorPane();
        scena = new Scene(anchorPane,700, 600);
        pobierzNick();
        poleDoWpisywania();
        poleDoWyswietlania();
        utworzPrzycisk();
        wyslijWiadomosc();
    }

    private void wyslijWiadomosc() {

        //albo enter wysyla wiadomosc + nick

        sendBtn.setOnAction(t->{
            String gotowyTekst = poleDoWpisywania.getText();
            poleDoWpisywania.clear();
            //polaczenie.wyslijWiadomosc(gotowyTekst);

            String Rozmowa = poleDoWyswietlania.getText();

            gotowyTekst =  "Ty: " + gotowyTekst;

            if(!Rozmowa.equals("")) {
                gotowyTekst = "\n" + gotowyTekst;
            }

            if(poleDoWpisywania.getText().equals("")) {
                sendBtn.setDisable(true);
            }
            else {
                sendBtn.setDisable(true);
            }
            Rozmowa = Rozmowa + gotowyTekst;
            poleDoWyswietlania.setText(Rozmowa);
        });
    }

    private void pustaWiadomosc() {
        pustaWiadomosc = new Label ("Nie można wysłać pustej wiadomości!");
        anchorPane.getChildren().add(pustaWiadomosc);
        AnchorPane.setBottomAnchor(pustaWiadomosc, 35.0);
        AnchorPane.setLeftAnchor(pustaWiadomosc, 150.0);
        pustaWiadomosc.setPrefHeight(30);
        pustaWiadomosc.setPrefWidth(500);
        pustaWiadomosc.setTextFill(Color.RED);
    }

    private void utworzPrzycisk() {
        sendBtn = new Button("Wy\u015Blij");
        sendBtn.setDisable(true);
        sendBtn.prefHeight(30);
        sendBtn.prefWidth(80);
        anchorPane.getChildren().add(sendBtn);
        AnchorPane.setLeftAnchor(sendBtn, 600.0);
        AnchorPane.setRightAnchor(sendBtn,15.0);
        AnchorPane.setBottomAnchor(sendBtn, 65.0);
    }

    private void pobierzNick(){
        pobierzNick = new TextArea();
        pobierzNick.setPrefHeight(500);
        pobierzNick.setPrefWidth(120);
        anchorPane.getChildren().add(pobierzNick);
        AnchorPane.setLeftAnchor(pobierzNick, 15.0);
        AnchorPane.setBottomAnchor(pobierzNick, 60.0);

        pobierzNick.setEditable(false);
        pobierzNick.setWrapText(true);

        //inject nick from LOGIN.JAVA
    }

    private void poleDoWpisywania() {
        poleDoWpisywania = new TextArea();
        poleDoWpisywania.setPrefHeight(45);
        poleDoWpisywania.setPrefWidth(435);

        anchorPane.getChildren().add(poleDoWpisywania);
        AnchorPane.setLeftAnchor(poleDoWpisywania, 150.0);
        AnchorPane.setBottomAnchor(poleDoWpisywania, 60.0);
        AnchorPane.setRightAnchor(poleDoWpisywania, 110.0);

        poleDoWpisywania.setPromptText("Maksymalnie 300 znak\u00f3w");
        poleDoWpisywania.setFocusTraversable(false);


        final int maxLength = 300;
        final int minLength = 1;
        poleDoWpisywania.setOnKeyTyped(t -> {
            if (poleDoWpisywania.getText().length() > maxLength)
            {
                int pos = poleDoWpisywania.getCaretPosition();
                poleDoWpisywania.setText(poleDoWpisywania.getText(0, maxLength));
                poleDoWpisywania.positionCaret(pos);
            }
            else if (poleDoWpisywania.getText().length() >= minLength)
            {
                sendBtn.setDisable(false);
            }
            else if  (poleDoWpisywania.getText().length() < minLength)
            {
                sendBtn.setDisable(true);
            }
        });

        poleDoWpisywania.setWrapText(true);

        //ENTER WYSYŁA WIADOMOŚĆ + NICK
    }

    private void poleDoWyswietlania() {
        poleDoWyswietlania = new TextArea();
        poleDoWyswietlania.setPrefHeight(440);
        poleDoWyswietlania.setPrefWidth(535);
        anchorPane.getChildren().add(poleDoWyswietlania);
        AnchorPane.setLeftAnchor(poleDoWyswietlania, 150.0);
        AnchorPane.setBottomAnchor(poleDoWyswietlania, 120.0);
        AnchorPane.setRightAnchor(poleDoWyswietlania, 15.0);

        poleDoWyswietlania.setEditable(false);
        poleDoWyswietlania.setWrapText(true);

        //ALBO TUTAJ ENTER WYSYŁA WIADOMOŚĆ + NICK
        //pobiera tekst z poledowpisywania
        }

    public Scene getScena() {
        return scena;
    }
}

Я понимаю, что это может быть основная информация, но я бы попросил помощи и возможного улучшения кода;)

...