All my JavaFX TextFields have lines in them
Solution 1:
This is a known unresolved bug.
The problem seems to be that it isn't reproducible for the developers.
In the comments of the bug report the use of a jvm parameter is suggested:
-Dprism.disableRegionCaching=true
However, if anyone is able to reproduce this very rare bug, my suggestion is to:
- modify the modena css file until the bug is resolved and share that information. it may help since caspian seems to work.
- if necessary debug into the javafx source to isolate the issue. however, the problem might run deeper, but it's worth a shot
Solution 2:
Emm... I am not 100% sure cause I don't have the effect on my jvm though I have Linux platform; But still I tried to emulate (? not sure I succeeded pretty well) anyways I guess the issue you describe may be really related to
- a) font
- b) repaint problem
The code you represented I modified a bit to show what happens to gridpanel lines if components located in "some" order;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class BlackLineIssueJavaFXApplication1 extends Application {
@Override
public void start(Stage primaryStage) {
System.setProperty("javafx.userAgentStylesheetUrl", "Modena");
//Modena,caspian
primaryStage.setTitle("JavaFX Welcome");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
// grid.setGridLinesVisible(false);//<---
Text scenetitle = new Text("Welcome");//original
// Label scenetitle = new Label("Welcome");//modified
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));//original
// scenetitle.setFont(Font.font("Verdana", FontWeight.LIGHT, 30));//modified
grid.add(scenetitle, 0, 0, 2, 1);//original
// grid.add(scenetitle, 0, 0);//modified
Label userName = new Label("User Name:");//original
// Text userName = new Text("User Name:");
// userName.setFont(Font.font("Tahoma", FontWeight.NORMAL, 11));
// grid.add(userName, 0, 1);//original
grid.add(userName, 0, 1,1,2);//modified
grid.setGridLinesVisible(true);//<---
TextField userTextField = new TextField();
// userTextField.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));//modified
userTextField.setOpacity(0.5);//<----
// grid.add(userTextField, 1, 1);//original
grid.add(userTextField, 1, 1,1,2);//modified
grid.setGridLinesVisible(false);//<---
Button btn = new Button("Sign in");
HBox hbBtn = new HBox(10);
hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
hbBtn.getChildren().add(btn);
grid.add(hbBtn, 1, 4);//original
//grid.add(hbBtn, 1, 3);//modified
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
The running app looks like that :
Image A :
...so the black line appears in text field in distance about 10px maybe just because the Vgap set to 10; Moreover, see the "welcome" text is crossed but with vertical lines; I tested if "not to use font" for scenetitle it located correctly (see image);
Image B
So something is maybe wrong with GridPane I guess; Maybe the default GridPane has "lines visible" or something but after components added the lines "disposed" but because of TextField which should contain "text" with "font" (see image A vertical lines cross text because of the font) the repaint doesn't work properly and you can see the black line at the top as image A shows; I cannot emulate the effect totally but still I may suggest where the "un-disposed" line may come from or something :)
I'll try to analyse a bit further anyways the info I describe in this answer may help you to find where to start debugging;
If you need some additional information please let me know;
Good luck :)
toolkit I used to test :
- jdk-1.0.8_25
- jre-1.8.0_60 (Linux x64)
- ide : netbeans 8.0.1