JavaFX: stage/scene – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

JavaFX: stage/scene – Java – Fórum – Programujte.comJavaFX: stage/scene – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
cheki
~ Anonymní uživatel
26 příspěvků
1. 9. 2016   #1
-
0
-

Čawte. Robím prvú appku, pri ktorej sa učím javaFX. Spravil som si prvé okno na login(user/pass), pridal button. Môj problém je teraz: Po kliknutí na button chcem aby (pri zadaní mena/hesla) sa toto okno zavrelo a otvorilo sa nové. 1- pre kód na to ďalšie okno, kde budú ďalšie buttony ai mám vytvoriť nový file? 2. na to druhé okno mám použiť novú scénu alebo stage? 3- treba to prvé okno na login nejak ukončiť? (close).

k druhému bodu: stačí, keď spravím druhú scénu a na ten button dám napr: btn2.setOnAction(e -> window.setScene(scene1));??

dik za pomoc

Nahlásit jako SPAM
IP: 95.105.238.–
Reklama
Reklama
Matrix17
~ Anonymní uživatel
285 příspěvků
2. 9. 2016   #2
-
0
-

Budeš potřebovat další Stage. Tj. každé okno má vlastní stage. Po kliknutí na tlačítko přihlásit (ověření loginu a hesla) zavoláš nad aktuálním oknem hide() a nad tím novým oknem show().

Nahlásit jako SPAM
IP: 213.226.237.–
cheki
~ Anonymní uživatel
26 příspěvků
4. 9. 2016   #3
-
0
-

 tu je kód, Okej chápem... ale ked budem mať napr 100 ďaľších okien tak všetky tie stage pôjdu sem ? >>  

public class Login extends Application {

    Stage stWindow;
    String password = new String("asdf");
package sample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Login extends Application {

    Stage stWindow;
    String password = new String("asdf");


    @Override
    public void start(Stage primaryStage) throws Exception{
        stWindow = primaryStage;
        stWindow.setTitle("Login");

        GridPane layout = new GridPane();
        layout.setPadding(new Insets(10,10,10,10));
        layout.setVgap(8);
        layout.setHgap(12);

        //Label - uzivatel
        Label lblUser = new Label();
        lblUser.setText("Username: ");
        layout.add(lblUser, 0,0);

        //Textfield uzivatel input
        TextField inputUser = new TextField();
        inputUser.setPromptText("User name");
        inputUser.setText("cheki");
        layout.add(inputUser,1,0);


        //Label - Password
        Label lblPass = new Label();
        lblPass.setText("Password: ");
        layout.add(lblPass, 0,1);


        Label lblmsg = new Label();
        layout.add(lblmsg, 1,3);

        PasswordField passField = new PasswordField();
        passField.setPromptText("password");
        layout.add(passField,1,1);


        //Button login
        Button btnLogin = new Button();
        btnLogin.setText("Log in");
        layout.add(btnLogin,1,2);

        btnLogin.setOnAction(e -> {
            System.out.println("button login clicked");
            if (passField.getText().equals(password)){
                


                lblmsg.setText("Your password is correct!");
                lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("login succesfull");

            }else{

                lblmsg.setText("Your password is incorrect!");
                lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("incorrect");
            }


        });
        //Button register
        Button btnRegister = new Button();
        btnRegister.setText("Reg me");
        layout.add(btnRegister,0,2);

        //layout.setGridLinesVisible(true);

        Scene scena = new Scene(layout,251,150);
        stWindow.setScene(scena);
        stWindow.show();
    }

    //public boolean CheckPassword (String s )


    public static void main(String[] args) {
        launch(args);
    }
}
Nahlásit jako SPAM
IP: 95.105.238.–
cheki
~ Anonymní uživatel
26 příspěvků
4. 9. 2016   #4
-
0
-

cize v btnLogin po vyhodnoteny podmienky pridam novy stage a scenu + show(), hide() ? Lebo ide mi o to ze to co bude za tym klikom (okno) chcem dat ako dalsi subor (zatial som amamter) cize s tym nejak bojujem

Nahlásit jako SPAM
IP: 95.105.238.–
Matrix17
~ Anonymní uživatel
285 příspěvků
5. 9. 2016   #5
-
0
-
Nahlásit jako SPAM
IP: 176.74.134.–
cheki
~ Anonymní uživatel
26 příspěvků
6. 9. 2016   #6
-
0
-

hej viem, že sa dá použiť scene builder a verím, že to je celkom ľahké :). Len chcem to takto ručne aby som aj niečo programoval :), takto ma to aj núti riešiť problémy a tým sa to lepšie učím :) všeobecne javu pri tom, nie len fx.

nejak takto?

 btnLogin.setOnAction(e -> {
            System.out.println("button login clicked");
            if (passField.getText().equals(password)){
                BorderPane layoutMenu = new ObrMenu();
                Scene scena = new Scene(panel,640,480);
                stWindow.setScene(scena);
                stWindow.show();

                //lblmsg.setText("Your password is correct!");
                //lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("login succesfull");

            }else{

                lblmsg.setText("Your password is incorrect!");
                lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("incorrect");
            }


        });

a vlastne potom:  public class ObrMenu extends BorderPane {

či aj tak zle ? :D

Nahlásit jako SPAM
IP: 95.105.238.–
cheki
~ Anonymní uživatel
26 příspěvků
7. 9. 2016   #7
-
0
-

ten button:

btnLogin.setOnAction(e -> {
            System.out.println("button login clicked");
            if (passField.getText().equals(password)){
                StackPane layoutMenu = new ObrMenu();
                Scene scena = new Scene(layoutMenu,640,480);
                stWindow.setScene(scena);
                stWindow.show();

                //lblmsg.setText("Your password is correct!");
                //lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("login succesfull");

            }else{

                lblmsg.setText("Your password is incorrect!");
                lblmsg.setTextFill(Color.rgb(21, 117, 84));
                System.out.println("incorrect");
            }

a vlastne po podmienke:

package sample;

import javafx.scene.layout.StackPane;

/**
 * Created by cheki on 7. 9. 2016.
 */
public class ObrMenu extends StackPane{

    public ObrMenu(){
        super();
    }
}

teraz ked chcem pridat nejaky button tak mal by som napisat metodu a tu potom dat do konstruktoru?

Nahlásit jako SPAM
IP: 95.105.238.–
Matrix17
~ Anonymní uživatel
285 příspěvků
8. 9. 2016   #8
-
0
-

#7 cheki
Tak ono hlavně je to spíš ztráta času, když tyhle věci můžeš udělat rychlejc. Jo asi se i něco naučíš ale já už to beru z trochu jinýho hlediska. :) Navíc právě fxml si myslím, že taky není k zahození se naučit...

Může to vypadat třeba takhle:

soubor LoginApp.java:

package fxlogin;

import javafx.application.Application;
import javafx.stage.Stage;

public class LoginApp extends Application
{
  public static void main(String[] args)
  {
    Application.launch(LoginApp.class, args);
  }

  @Override
  public void start(Stage mainWindow) throws Exception
  {
    new LoginWindow(mainWindow);
  }
}


soubor LoginWindow.java:

package fxlogin;

import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 * @author Milan Fašina
 *
 */
public class LoginWindow extends Stage
{
  private static final String PASSWORD_EXAMPLE = "ahoj";

  private final Stage mainWindow;

  public LoginWindow(Stage mainWindow)
  {
    this.mainWindow = mainWindow;

    setTitle("Přihlašovací okno");
    setScene(new Scene(getContent(), 300, 275));
    show();
  }

  private Parent getContent()
  {
    GridPane layout = new GridPane();
    layout.setPadding(new Insets(10,10,10,10));
    layout.setVgap(8);
    layout.setHgap(12);

    //Label - uzivatel
    Label lblUser = new Label();
    lblUser.setText("Username: ");
    layout.add(lblUser, 0,0);

    //Textfield uzivatel input
    TextField inputUser = new TextField();
    inputUser.setPromptText("User name");
    inputUser.setText("cheki");
    layout.add(inputUser,1,0);


    //Label - Password
    Label lblPass = new Label();
    lblPass.setText("Password: ");
    layout.add(lblPass, 0,1);


    Label lblmsg = new Label();
    layout.add(lblmsg, 1,3);

    PasswordField passField = new PasswordField();
    passField.setPromptText("password");
    layout.add(passField,1,1);


    //Button login
    Button btnLogin = new Button();
    btnLogin.setText("Log in");
    layout.add(btnLogin,1,2);

    btnLogin.setOnAction(e -> {
      System.out.println("button login clicked");
      if (passField.getText().equals(PASSWORD_EXAMPLE))
      {
        this.hide();

        mainWindow.setTitle("hlavní okno");
        mainWindow.setScene(new MainContent());
        mainWindow.show();
      }
      else
      {
        lblmsg.setText("Your password is incorrect!");
        lblmsg.setTextFill(Color.rgb(21, 117, 84));
        System.out.println("incorrect");
      }


    });
    //Button register
    Button btnRegister = new Button();
    btnRegister.setText("Reg me");
    layout.add(btnRegister,0,2);

    return layout;
  }
}


soubor MainContent.java:

package fxlogin;

import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;

/**
 * @author Milan Fašina
 *
 */
public class MainContent extends Scene
{
  public MainContent()
  {
    super(getContent());
  }

  private static Parent getContent()
  {
    GridPane layout = new GridPane();
    layout.setPadding(new Insets(10,10,10,10));
    layout.setVgap(8);
    layout.setHgap(12);

    Label lblUser = new Label();
    lblUser.setText("Vítej ó nejmocnější");
    layout.add(lblUser, 0,0);

    return layout;
  }
}

Nahlásit jako SPAM
IP: 83.240.101.–
cheki
~ Anonymní uživatel
26 příspěvků
11. 9. 2016   #9
-
0
-

Heh je to trocha iné :D ale viac menej chápem asi všetko. Dik idem to prerobiť a skúsiť pokračovať daľej :) Večer (ak stihnem) to sem postnem a určite s novým problémom :D

Dik zatial

Nahlásit jako SPAM
IP: 95.105.238.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Podobná vlákna

Veľkost stage v JavaFX — založil ja

Boujou - Scene Geometry nefunguje — založil Dominik Rozporka

JavaFX na mobilu — založil goddard

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý