• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java FXML - Jak wygasić jedną scenę aby włączyć drugą

Cloud VPS
0 głosów
525 wizyt
pytanie zadane 22 maja 2020 w Java przez Mirosław Ziobro Nowicjusz (180 p.)

Mam taki plik:

package Controllers;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.application.Application;


public class PanelLogowaniaController {

    @FXML
    ImageView logo_wup = new ImageView();
    @FXML
    Label labelLogin = new Label();
    @FXML
    Label labelPass = new Label();

    @FXML
    TextField loginField = new TextField();
    @FXML
    PasswordField passField = new PasswordField();
    @FXML
    Button zalogujButton = new Button();
    @FXML
    Text komunikat = new Text("");
    @FXML
   public Pane panelLogowania = new Pane();


    public Pane programMain = new Pane();

   public Stage stage = new Stage();


   // TabPane mainWindowsProgram = new TabPane();


    public PanelLogowaniaController() {


    }


    @FXML
    public void btnZalogujPanelLogowania(){


        Connection connection = null;

        if (loginField.getText()==null) {

            loginField.setText("login");

        }

        if (passField.getText()==null) {

            passField.setText("password");

        }

        try{
                int dbConnectionMetod = 1;

            switch(dbConnectionMetod){

                case 1:

                    //ładowanie sterownika jdbc
                    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                    //   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                    connection =
                            DriverManager.getConnection("jdbc:ucanaccess://C:\\WUP\\MojaAplikacja\\mojaAplikacja.accdb");
                    // connection = DriverManager.getConnection("jdbc:ucanaccess://C:\\MojaAplikacja\\mojaAplikacja" +
                    //   ".accdb");


                    break;

                case 2:

                    //ładowanie sterownika jdbc
                    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                    //   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                    connection =
                            DriverManager.getConnection("jdbc:ucanaccess://C:\\WUP\\MojaAplikacja\\mojaAplikacja.accdb");
                    // connection = DriverManager.getConnection("jdbc:ucanaccess://C:\\MojaAplikacja\\mojaAplikacja" +
                    //   ".accdb");


                    break;

            }


            Statement statement = connection.createStatement();
            ResultSet resultSet =
                    statement.executeQuery("SELECT * FROM users WHERE login='"+loginField.getText()+"' AND " +
                            "password='"+passField.getText()+"' AND status=1 LIMIT 1");
            resultSet.next();
            String login = resultSet.getString("login");
            String password = resultSet.getString("password");
            String uzytkownik = resultSet.getString("imie")+" "+resultSet.getString("nazwisko");

            //   System.out.println(login);
            //   System.out.println(password);
            //    System.out.println(uzytkownik);
            resultSet.close();



            if (loginField.getText().equals(login) & passField.getText().equals(password)) {




                //  programTabsDlaWupController.ustawLoginZalogowanego(uzytkownik);

                logowanieDisabled();

                 // ukrywanie panelu logowania

               // komunikat.setText("Zalogowałeś się");


                FXMLLoader loader = new FXMLLoader();
                loader.setLocation(this.getClass().getResource("/fxmls/ProgramUserDetale.fxml"));


                programMain = loader.load();

                Scene scenePrigram = new Scene(programMain);


                stage.setTitle("Program główny");
                stage.setScene(scenePrigram);
                stage.show();










            } else
            {

                komunikat.setText("Wpisałeś niepoprawne dane logowania. Spróbuj ponownie!!!");

            }


        }catch (Exception e){

            // System.out.println("Blad polaczenia z baza "+ e);
            //  String ex = e.printStackTrace();
            //  System.out.println(e); e.printStackTrace();
            komunikat.setText("Wpisałeś niepoprawne dane logowania. Spróbuj ponownie!!! 22");


        }


    }

    public void Initialize(){

        Pane panelLogowania = new Pane();
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(this.getClass().getResource("/fxmls/PanelLogowania.fxml"));

        try {
            panelLogowania = loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Scene scene = new Scene(panelLogowania,454,353);

        stage.setTitle("Logowanie");
        stage.setScene(scene);
        stage.show();


    }

        public void logowanieDisabled(){
        panelLogowania.setVisible(false);

        }
}

W momencie uruchamiania programu z class Main 

PanelLogowaniaController panelLogowaniaController = new PanelLogowaniaController();
        panelLogowaniaController.Initialize();

program nie wygasza mi FXML-a PanelLogowania.fxml  tylko uruchamia dodatkową formatkę ProgramUserDetale.fxml.

Wcześniej jak miałem napisane to w kodzie JavyFX to działało teraz nie działa mi polecenie 

panelLogowania.setVisible(false);

Gdzie robię błąd?

1 odpowiedź

0 głosów
odpowiedź 22 maja 2020 przez mbabane Szeryf (79,260 p.)
if (loginField.getText().equals(login) & passField.getText().equals(password)) 

Czy na pewno powyższy if jest spełniony? Generalnie powinno być &&, aczkolwiek w tym przypadku niewiele to zmienia.

Zobacz co dokładnie robi metoda:

 stage.show();

Możliwe że ona leci po wszystkim co ma w sobie i robi:

setVisible(true);

Tak na logikę. Obiekt stage już raz miał wykonane show więc wydaje mi się, że kolejne wołanie stage.show() w if'e jest zbędne, bo ten stage to jest całe okno, a okna nie zamykasz/chowasz. Wyłączasz tylko jakiś komponent w tym oknie (na stage).

Podobne pytania

0 głosów
0 odpowiedzi 514 wizyt
pytanie zadane 25 października 2016 w Java przez K0XM4N Gaduła (3,640 p.)
0 głosów
1 odpowiedź 1,876 wizyt
pytanie zadane 25 stycznia 2018 w Java przez must Bywalec (2,980 p.)
0 głosów
1 odpowiedź 1,042 wizyt
pytanie zadane 21 czerwca 2016 w Java przez kaminki Obywatel (1,030 p.)

93,467 zapytań

142,460 odpowiedzi

322,734 komentarzy

62,847 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...