Partage
  • Partager sur Facebook
  • Partager sur Twitter

JAVAFX : switcher entre plusieurs panels

problème sur la dimension de la fenetre

9 juillet 2015 à 10:38:44

Bonjour,

Je suis entrain de faire un petit exercice pour comprendre comment switcher (en cliquant sur un bouton) d'un panel à un autre dans une même application. Pour se faire je crée une classe "extend" application. et deux autre classe "extend" BorderPane qui contiennent mes panels a afficher dans mon application.

A l’exécution, j'arrive bien  à passer d'un panel à un autre mais j'ai un problème au niveau de la taille de ma fenêtre. Si je switch entre mes deux panel sans toucher à la taille de ma fenetre, j n'ai pas de problèmes. Mais si jamais je modifie la taille de la fenêtre du panel 1, quand je switch sur le panel 2, la fenêtre du panel 2 est redimensionnée.

J'aimerais faire en sorte de ne pas affecter la taille de ma fenêtre en cliquant sur mes boutons de switch d'un panel à un autre ?

                                             

Code de l'application

package test;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Test extends Application{
	
	private BorderPane PanelAnnuaire = new BorderPane();
	private BorderPane panelLogin = new Panel1();
	

	@Override
	public void start(Stage stage) throws Exception {
		// TODO Auto-generated method stub
		
		PanelAnnuaire.setCenter(panelLogin);
		Scene scene = new Scene(PanelAnnuaire, 200, 200);
		stage.setTitle("test");
		stage.setScene(scene);
		stage.show();
		
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

Code de mes deux panels

package test;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Panel1 extends BorderPane {

	private Label message = new Label("Panel 1");
	private Button BoutonAller = new Button("Aller");

	public Panel1() {

		
		BoutonAller.setPrefSize(295, 50);
		this.setCenter(BoutonAller);
		this.setTop(message);
		message.setTextFill(Color.RED);

		/* Gérer les boutons */

		BoutonAller.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				Stage nouveauStage;
				nouveauStage = (Stage) ((Node) arg0.getSource()).getScene().getWindow();
				Scene scene = new Scene(new Panel2(),200, 200);
				nouveauStage.setScene(scene);
			}
		});

	}

}
package test;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Panel2 extends BorderPane {

	private Button BoutonRetour = new Button("Retour");
	private Label message = new Label("Panel 2");

	public Panel2() {
		BoutonRetour.setPrefSize(295, 50);
		this.setCenter(BoutonRetour);
		this.setTop(message);
		message.setTextFill(Color.GREEN);

		/* Gérer les boutons */

		BoutonRetour.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				Stage nouveauStage;
				nouveauStage = (Stage) ((Node) arg0.getSource()).getScene().getWindow();
				Scene scene = new Scene(new Panel1(), 200, 200);
				nouveauStage.setScene(scene);
			}

		});

	}
}

Cordialement.

  • Partager sur Facebook
  • Partager sur Twitter
9 juillet 2015 à 14:44:22

Ce pauvre billet reste sans réponse :-°. Bon, je vais me répondre à moi même histoire que les autres qui se poseront la question dans le futur, le sache grâce à ce poste :ange:. Une autre façon de faire (sans problème de dimensionnement de la fenêtre) est la suivante :

package test;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Test extends Application{
	
	private BorderPane PanelAnnuaire = new BorderPane();
	private BorderPane panel1 = new BorderPane();
	private BorderPane panel2 = new BorderPane();
	
	private Label message1 = new Label("Panel 1");
	private Button BoutonAller = new Button("Aller");
	
	private Button BoutonRetour = new Button("Retour");
	private Label message2 = new Label("Panel 2");

	@Override
	public void start(Stage stage) throws Exception {
		// TODO Auto-generated method stub
		
		/*Panel 1*/
		
		BoutonAller.setPrefSize(295, 50);
		panel1.setCenter(BoutonAller);
		panel1.setTop(message1);
		message1.setTextFill(Color.RED);
		
		/*Panel 2*/
		
		BoutonRetour.setPrefSize(295, 50);
		panel2.setCenter(BoutonRetour);
		panel2.setTop(message2);
		message2.setTextFill(Color.GREEN);
		
		/*Actions Boutons*/
		
		BoutonAller.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				PanelAnnuaire.setCenter(panel2);
			}
		});
		
		BoutonRetour.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				PanelAnnuaire.setCenter(panel1);
			}

		});

		PanelAnnuaire.setCenter(panel1);
		Scene scene = new Scene(PanelAnnuaire, 1400, 700);
		stage.setTitle("test");
		stage.setScene(scene);
		stage.show();

	}
	
	public static void main(String[] args) {
		launch(args);
	}
}



  • Partager sur Facebook
  • Partager sur Twitter
19 août 2022 à 0:30:26 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


19 août 2022 à 3:53:37

@SolaireFR  Bonsoir, merci de ne pas déterrer d'ancien sujet. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses) un descriptif de votre problème et le code que vous avez écrit inséré sur le forum avec l'outil d'intégration de code soit le bouton code </>.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter