Я пишу простой сетевой коммуникатор.
Вчера у меня была проблема со сменой сцен, но сегодня я не знаю, как 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;
}
}
Я понимаю, что это может быть основная информация, но я бы попросил помощи и возможного улучшения кода;)