Bom dia.
Eu estou usando o Scene Builder para criar minhas telas.
Bem, como eu faria para deixar uma tela com uma resolução fixa e impedir de ser maximizada?
No programa tem em Layout->size o minimo e maximo e um tamanho preferencial, porém, mesmo setando todos os valores, a tela ainda pode ser maximizada.
No Scene Builder tem um propriedade Resizable, porém ela vem checada mas desabilitada para interação.
Outro problema é:
Como manter os componentes sempre dispostos na tela de forma organizada, mesmo quando a tela é maximizada ou reduzida de tamanho?
Grande abraço.
Bom dia Luiz, tudo bom?
Bom, vamos lá:
Para impedir o usuário de maximizar a tela, você deve utilizar o método setResizable da Stage, que está localizado na sua classe Application.
Coloque este código dentro do método start(Stage stage).
[code]public class AgendaApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
// Demais códigos…
stage.setResizable(false);
stage.show();
}
}[/code]
Agora, na questão de ajuste de tela, isto sempre foi um grande pesadelo de aplicações Desktop, pois para trabalhar com Flexible Layout não é uma tarefa tão fácil…
Mas, como conselho, dê uma olhada nas Properties dos componentes, onde achará o método bind, que trabalha com Observer em alguma outra propriedade.
Dando um exemplo: tenho uma TableView que está no tamanho full da tela, mas a tela pode ser redimensionada, fazendo a tabela se desajustar. Para isto, compare o tamanho da tabela com o tamanho da tela (Stage).
tbCompromisso.prefWidthProperty().bind(AgendaApplication.getStage().widthProperty());
tbCompromisso.prefHeightProperty().bind(AgendaApplication.getStage().heightProperty());
Este código pega a Property da largura e altura da TableView e compara, em tempo de execução, com a Property da largura e altura da tela. Ou seja, quando alterar o tamanho da tela, altera o tamanho da TableView.
1 curtida
Meu amigo bom dia.
Bem, estranho não deu certo, Mesmo colocando o setResizable(False), a tela continua sendo maximizada.
package br.com.luizpicolo.application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
*
* @author Luiz Picolo
*/
public class Rammus extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Rammus.fxml"));
Scene scene = new Scene(root);
stage.setResizable(false);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Estranho, era para dar certo… Tenta fazer as coisas mais bobas para resolver, tipo, reiniciar o Eclipse, dar um refresh no projeto, etc…
Realmente funcionou, porem eu fiz o texto no Windows 7. Contudo, no meu ElementaryOS não funcionou. Acredito que possa ser algum bug mas que não influenciará no sistema.
Valeu e grande abraço.
Ah, que bom então! E sobre o bind, ajudou?
Então, eu até agora estou mantendo as telas fixas.
Você acredito que isso pode dar problemas na utilização do sistema.
Segue em enexo a tela de login.
Então Luiz, vou lhe dar um conselho: utilize este bloqueio de maximizar tela constantemente!
Aí você não precisa se preocupar tanto com layout flexível, a não ser que as variações sejam internas.
Aproveitando o gancho, gostaria de elogiar sua tela de login, simples, clean e bastante objetiva…
Esta é a sacada do JavaFX: layout rico e clean, ao mesmo tempo.
Dica: pense com carinho sobre o uso de “prompt text” (aqueles hint’s usados em campos de texto), fica bem legal para o usuário identificar qual a intenção do campo, tanto visual, com o ícone, tanto escrito.
Exemplo:
Experimente e veja o resultado! 
Sinceramente estava procurando isso :D.
Utilizo muito esse conceito em formulários web.
Mas assim
[code]@FXML
private TextField tfUsuario;
tfUsuario.setPromptText(“Digite seu login”); [/code]
seria desta forma no Application.
Não não, na sua classe Controller (implements Initializable).
Utilize o método setPromptText dentro do método initialize, que seria seu “método main”.
Perfeito, Tinha dado certo, e que, como o foco estava no primeiro textfield, eu acabei nao vendo.
PERFEITO.