domingo, 15 de julho de 2018

JavaFX Accordion com ícones

A copa do mundo acabou, 
é hora  de voltar a programar,
E pra selar nossa volta venho
mostrando um exemplo de como usar
o Accordion do JavaFx.
Um Accordion é um grupo de TitlePanes.
Mas apenas um TitledPane pode ser aberto por vez.
O conteúdo do TitledPane em um Accordion pode ser

qualquer Nó, como controles de interface do usuário
ou grupos de nós adicionados a um contêiner de layout.
Alguns testes mostraram Um comportamento
inesperado ao tentar utilizar os métodos
MinHeight, PrefHeight ou MaxHeight para
controlar as interfaces, isto ocorre
porque a altura do Accordion muda quando um 

TitledPane é aberto ou fechado.
Portanto descarto rapidamente estas opções.

Veja abaixo imagens do programa em execução:








Veja abaixo um vídeo com o funcionamento do programa:


Veja abaixo o código do programa:


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;

public class PROJETO extends Application {
     Pane root = new Pane ( );
     static Canvas canvas = new Canvas ( 640, 350 );
     Scene s1 = new Scene ( root, 640, 350, Color.WHITE );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     // criando o Accordion
     Accordion accordion = new Accordion ( );
     public static Button btn_1 = new Button ( );
     public static Button btn_2 = new Button ( );
     public static Button btn_3 = new Button ( );
    // /////////////////////////////////////////////////////////////////////////
     static class cl {               
         public static void Informe ( ) {
              ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
              ctx.setFill ( Color.RED );
              ctx.fillText ( "Por: ", 250, 275 );
              ctx.setFill ( Color.BLUE );
              ctx.fillText ( "Samuel Lima", 280, 275 );
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( "sa_sp10@hotmail.com", 250, 290 );
         }   
         public static Node Button ( ) {
              btn_1.setPrefWidth ( 60 );// Largura do botão
              btn_1.setLayoutX ( 285 );// Posição do botão coluna
              btn_1.setPrefHeight ( 20 );// altura do botão
              btn_1.setLayoutY ( 200 );// //Posição do botão linha   
              btn_1.setStyle ( "-fx-padding: 1;" + "-fx-border-style: solid inside;"
                        + "-fx-border-width: 2;" + "-fx-border-insets: 1;"
                        + "-fx-border-radius: 1;" + "-fx-border-color: white;");
              btn_1.setOnAction ( new EventHandler < ActionEvent > ( ) {
                   @Override
                   public void handle ( ActionEvent event ) {
                        RotateTransition rotate = new RotateTransition ( );
                        // Definindo a duração da transição
                        rotate.setDuration ( Duration.millis ( 1000 ) );     
                        // Configurando o nó para a transição
                        rotate.setNode ( btn_1 );
                        // Ajustando o eixo da rotação
                        rotate.setAxis ( Rotate.Y_AXIS );
                        // Ajustando o ângulo da rotação
                        rotate.setByAngle ( 360 );
                        // Definindo a contagem de ciclos para a
                        // transição
                        rotate.setCycleCount ( 50 );
                        // Configurando o valor do reverso automático
                        // para falso
                        rotate.setAutoReverse ( false );       
                        rotate.play ( );
                   }
              } );
              return btn_1;
         }
     }
     // ////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage s ) throws FileNotFoundException {
         s.setTitle ( "JAVAFX - ACCORDION COM ÍCONES" );
         // Criando moldura e aplicando efeitos
         root.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 12;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: darkblue;" );
         ctx.setFont ( Font.font ( "Arial", FontWeight.BOLD, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - ACCORDION COM ÍCONES", 190, 40 );
         Image image_1 = new Image ( new FileInputStream (
                   "H:\\eclipse - luna java\\PROJETOS\\PROJETO\\src\\Foto\\França.png" ) );
         Image image_2 = new Image ( new FileInputStream (
                   "H:\\eclipse - luna java\\PROJETOS\\PROJETO\\src\\Foto\\Croácia.png" ) ); 
         Image image_3 = new Image ( new FileInputStream (
                   "H:\\eclipse - luna java\\PROJETOS\\PROJETO\\src\\Foto\\Belgica.png" ) );
         TitledPane t1 = new TitledPane ( " França é bicampeã mundial", cl.Button ( ) );
         TitledPane t2 = new TitledPane ( "Croácia é vice campeã 2018",
                   new Label ( "A sensação da\ncopa do mundo\n de 2018\n" ) );
         TitledPane t3 = new TitledPane ( "A Belgica ficou em 3º lugar",
                   new Button ( "Nossos parabéns\n pra você Belgica" ) );
         // Adicionando ícones ao TitledPane
         t1.setGraphic (   new ImageView ( image_1 ) );
         t2.setGraphic (   new ImageView ( image_2 ) );
         t3.setGraphic (   new ImageView ( image_3 ) );
         //Endereço para abrir imagem
         Image image = new Image ( new FileInputStream (
                   "H:\\eclipse - luna java\\PROJETOS\\PROJETO\\src\\Foto\\França.png" ) );
         btn_1.setGraphic ( new ImageView ( image ) );
         //Defini estas medidas por padrão
         //Evitando um dimensionamento automático
         accordion.setMinSize ( 315, 300 );
         // Posiciona o accordion na horizontal
         accordion.setLayoutX ( 110 );
         // Posiciona o accordion na vertical
         accordion.setLayoutY ( 70 );   
         // Adicionando todas as abas
         accordion.getPanes ( ).addAll (  t1, t2, t3 );
         cl.Informe ( );
         //Adicionando o accordion junto com o canvas
         //Para que entrem em sicronia
         root.getChildren ( ).addAll ( canvas, accordion );
         s.setScene ( s1 );
         s.show ( );
     }
     public static void main ( String [ ] args ) {
         launch ( args );
     }
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.