Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setPromptText() function not working initially with TextField

private VBox addVBox() {

    VBox vb1 = new VBox();
    vb1.setPadding(new Insets(40, 40, 20, 40));
    vb1.setSpacing(20);
    vb1.setStyle("-fx-background-color: #333333;");

    TextField txt1 = new TextField();
    txt1.setPromptText("Class Number");
    txt1.setPrefSize(70, 30);

    Button b1 = new Button("DELETE");
    b1.setFont(Font.font("Calibri", FontWeight.BOLD, 17));
    b1.setPrefSize(100, 30);
    b1.setStyle(" -fx-base: #ffffff;");
    b1.setTextFill(Color.BLACK);

    vb1.getChildren().addAll( txt1, b1);        
    return vb1;
}

This is my code. In it setPromptText() function is working, but not showing the specified text content. This is because when the program is run, the textfield is the first control in it and when the window opens the textfield will be selected and so it does not shows the prompt text. How can I make the prompt text visible when the window opens ?

like image 979
TomJ Avatar asked Apr 13 '14 06:04

TomJ


2 Answers

Further digging revealed that it's a feature, not a bug - there are arguments for both:

  • not showing the prompt when the field is focused feels like missing crucial information at the time the user needs it most
  • ux argues that prompts shouldn't have crucial information, to start with

To serve both sides, the behaviour is configurable via css, f.i.

name.setStyle("-fx-prompt-text-fill: derive(-fx-control-inner-background,-30%); }");
like image 100
kleopatra Avatar answered Nov 15 '22 08:11

kleopatra


set FocusTraversable() method to false

try this...

private VBox addVBox() {

VBox vb1 = new VBox();
vb1.setPadding(new Insets(40, 40, 20, 40));
vb1.setSpacing(20);
vb1.setStyle("-fx-background-color: #333333;");

TextField txt1 = new TextField();
txt1.setPromptText("Class Number");
txt1.setPrefSize(70, 30);
txt1.setFocusTraversable(false); // set focus traversable false.

Button b1 = new Button("DELETE");
b1.setFont(Font.font("Calibri", FontWeight.BOLD, 17));
b1.setPrefSize(100, 30);
b1.setStyle(" -fx-base: #ffffff;");
b1.setTextFill(Color.BLACK);

vb1.getChildren().addAll( txt1, b1);        
return vb1;
}
like image 24
Anshul Parashar Avatar answered Nov 15 '22 07:11

Anshul Parashar