Este excelente contador de dois dígitos,
foi criado com os poderosos recursos da
biblioteca javaFx, sua excelência excede
soberbamente a biblioteca swing, alíás
penso comigo que é perca de tempo estudar
janelas gráficas em swing se temos a javaFx
que faz tudo e muito mais com tantos avanços
e superioridade em relação a sua concorrente.
A janela possui uma bela Moldura criada em canvas,
e isto é uma marca minha, quase cem por cento de meus
programas desde os tempos do C no dos, ou com gráficos
usando graphics.h, sempre criei Molduras em volta
da janela.
Temos ainda um menu no estilo profissional com duas opções,
sendo uma para saída do programa e a outra para informação
sobre o autor que sou eu mesmo, e chamada de dois botões.
Ainda na janela temos um botão com label "ok", que dá
início ao contador.
Quando a opção Inf do menu é acionada, ele chama dois botões,
Um é o botão Inf que mostra meu nome, e o outro é o botão
"cls", que apaga estas mensagens deixando a interface limpa.
Se você gosta de animação em javaFx comece agora mesmo
testando este programa.
Veja abaixo uma imagem do programa em execução:
Veja abaixo o código do programa:
foi criado com os poderosos recursos da
biblioteca javaFx, sua excelência excede
soberbamente a biblioteca swing, alíás
penso comigo que é perca de tempo estudar
janelas gráficas em swing se temos a javaFx
que faz tudo e muito mais com tantos avanços
e superioridade em relação a sua concorrente.
A janela possui uma bela Moldura criada em canvas,
e isto é uma marca minha, quase cem por cento de meus
programas desde os tempos do C no dos, ou com gráficos
usando graphics.h, sempre criei Molduras em volta
da janela.
Temos ainda um menu no estilo profissional com duas opções,
sendo uma para saída do programa e a outra para informação
sobre o autor que sou eu mesmo, e chamada de dois botões.
Ainda na janela temos um botão com label "ok", que dá
início ao contador.
Quando a opção Inf do menu é acionada, ele chama dois botões,
Um é o botão Inf que mostra meu nome, e o outro é o botão
"cls", que apaga estas mensagens deixando a interface limpa.
Se você gosta de animação em javaFx comece agora mesmo
testando este programa.
Veja abaixo uma imagem do programa em execução:
Veja abaixo o código do programa:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.event.EventHandler;
import javafx.scene.paint.Color;
import javafx.util.Duration;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.geometry.Insets;
import javafx.concurrent.Task;
/////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
private static final Integer INI_CONT = 99;
private Timeline tim_line;
private Label ti_mer = new Label ( );
private IntegerProperty tim_seg = new SimpleIntegerProperty (
INI_CONT );
private static Button btn_3 = new Button ( "ok" );
static Canvas canvas = new Canvas ( 490, 310 );
static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
static String str_1 = "MUITO OBRIGADO";
static String str_3 = "Por: Samuel Lima";
static BorderPane borderPane = new BorderPane ( );
static Pane ro_ot = new Pane ( );
static Scene sce_ne = new Scene ( ro_ot, 490, 310 );
static MenuBar menuBar = new MenuBar ( );
//
///////////////////////////////////////////////////////////////////
public static Node But_ton_1 ( ) {
Button btn_1 = new Button ( "Inf" );
btn_1.setPrefWidth ( 50 );// Largura do botão
btn_1.setLayoutX ( 22 );// Posição do botão
btn_1.setPrefHeight ( 20 );// altura do botão
btn_1.setLayoutY ( 262 );// //Posição do botão
btn_1.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
int b = 0;
b = 1;
Sleep ( 1800, b );
b = 2;
Sleep ( 2800, b );
}
} );
ro_ot.getChildren ( ).add ( btn_1 );
return btn_1;
}
//
///////////////////////////////////////////////////////////////////
public static Node But_ton_2 ( ) {
Button btn_2 = new Button ( "Cls" );
btn_2.setPrefWidth ( 50 );// Largura do botão
btn_2.setLayoutX ( 417 );// Posição do botão
btn_2.setPrefHeight ( 20 );// altura do botão
btn_2.setLayoutY ( 262 );// //Posição do botão
btn_2.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
// Coluna, linha,
comprimento, altura
// Apagando uma linha
ou partes
ctx.clearRect ( 80, 60, 180, 80 );
}
} );
ro_ot.getChildren ( ).add ( btn_2 );
return btn_2;
}
//
///////////////////////////////////////////////////////////////////
// Chamando uma função depois de um certo
tempo
public static void Tempo_2 ( ) {
ctx.setFill ( Color.GREEN );
ctx.fillText ( "MUITO
OBRIGADO", 80, 120 );
}
public static void Tempo_1 ( ) {
ctx.setFill ( Color.BLUE );
ctx.fillText ( "Por: Samuel
Lima", 80, 90 );
}
public static int Sleep ( int x, int k ) {
Task < Integer > close = new Task < Integer > ( ) {
@Override
protected Integer call ( ) throws Exception {
Thread.sleep ( x );
return null;
}
};
close.setOnSucceeded ( c -> {
if ( k == 1 )
Tempo_1 ( );
if ( k == 2 )
Tempo_2 ( );
} );
new Thread ( close ).start ( );
return 0;
}
//
/////////////////////////////////////////////////////////////////
public static int Menu_Bar ( ) {
EventHandler < ActionEvent > action = changeTabPlacement ( );
Menu menu = new Menu ( "Arq" );
MenuItem top = new MenuItem ( "Exit" );
top.setOnAction ( action );
menu.getItems ( ).add ( top );
MenuItem bottom = new MenuItem ( "Inf" );
bottom.setOnAction ( action );
menu.getItems ( ).add ( bottom );
menuBar.getMenus ( ).add ( menu );
borderPane.setTop ( menuBar );
return 0;
}
//
/////////////////////////////////////////////////////////////////
private static EventHandler < ActionEvent > changeTabPlacement ( ) {
return new EventHandler < ActionEvent > ( ) {
public void handle ( ActionEvent event ) {
MenuItem mItem = ( MenuItem ) event.getSource ( );
String side = mItem.getText ( );
if ( "Exit".equalsIgnoreCase ( side ) ) {
System.exit ( 0 );
} else if ( "Inf".equalsIgnoreCase ( side ) ) {
But_ton_1 ( );
But_ton_2 ( );
}
}
};
}
//
/////////////////////////////////////////////////////////////////
@Override
public void start ( Stage stage ) {
stage.setTitle ( "CONTADOR
DECRESCENTE EM JAVAFX" );
Menu_Bar ( );
btn_3.setPrefWidth ( 50 );// Largura do botão
btn_3.setLayoutX ( 220 );// Posição do botão
coluna
btn_3.setPrefHeight ( 20 );// altura do botão
btn_3.setLayoutY ( 155 );// //Posição do botão
linha
ti_mer.setPrefWidth ( 90 );// Largura do
timerLabel
ti_mer.setLayoutX ( 200 );// Posição do
timerLabel coluna
ti_mer.setPrefHeight ( 40 );// altura do
timerLabel
ti_mer.setLayoutY ( 185 );// //Posição do
timerLabel linha
// Dando uns efeitos na moldura
ro_ot.setStyle ( "-fx-padding:
5;" + "-fx-border-style: solid inside;"
+ "-fx-border-width:
18;" + "-fx-border-insets: 5;"
+ "-fx-border-radius:
5;" + "-fx-border-color: blue;" );
// Configurando o local exato do menu
borderPane.setPadding ( new Insets ( 23, 500, 0, 23 ) );
ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 20 ) );
ctx.setFill ( Color.RED );
ctx.fillText ( "CONTADOR
DECRESCENTE EM JAVAFX", 80, 60 );
// Sincronizando as propriedades de texto
timerLabel e timeSeconds
ti_mer.textProperty ( ).bind ( tim_seg.asString ( ) );
ti_mer.setTextFill ( Color.RED );
// Faz ajustes finos no timerLabel
ti_mer.setStyle ( "-fx-font-size:
4em;" + "-fx-padding: 10;"
+ "-fx-border-style:
solid inside;" + "-fx-border-width: 3;"
+ "-fx-border-insets:
5;" + "-fx-border-radius: 5;"
+ "-fx-border-color:
blue;" );
btn_3.setOnAction ( new EventHandler < ActionEvent > ( ) {
public void handle ( ActionEvent event ) {
if ( tim_line != null ) {
tim_line.stop ( );
}
tim_seg.set ( INI_CONT );
tim_line = new Timeline ( );
tim_line.getKeyFrames ( ).add (
new KeyFrame ( Duration.seconds ( INI_CONT + 1 ),
new KeyValue ( tim_seg, 0 ) ) );
tim_line.playFromStart ( );
}
} );
ro_ot.getChildren ( ).addAll ( canvas, borderPane, btn_3,
ti_mer );
stage.setScene ( sce_ne );
stage.show ( );
}
//
/////////////////////////////////////////////////////////////////
public static void main ( String [ ] args ) {
Application.launch ( args );
}
}