Wenn ich mir in JavaFX die Zähne schneide, laufen die Dinge bisher gut.
In allen Textfeldern verläuft jedoch eine Linie, etwa 10 Pixel von oben.
Nicht nur in meiner Anwendung, sondern auch in der SceneBuilder-Anwendung.
Hinweis: Ich verwende kein explizites CSS. Ich weiß nicht, was SceneBuilder verwendet. Der Screenshot stammt von SceneBuilder, meine Bildschirme sehen identisch aus.
Es ist also etwas Grundlegendes.
java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Unter Mac OS 10.9.5
Nur neugierig, ob jemand dies gesehen hat und einen Vorschlag hat.
Bearbeiten: Ich habe die Beispiele heruntergeladen, es hat eindeutig etwas mit dem Modena-Thema zu tun. Das kaspische Thema sieht gut aus. Unten sehen Sie einen Screenshot aus dem Abschnitt Modena.jar TextFields. Es ist interessant, dass der TextArea
ein ähnliches Problem hat, wenn auch nicht so allgemein wie der TextField
.
Weitere Ergänzungen:
Die Leute verlangen immer wieder danach, also hier ist es. Ich habe im Wesentlichen nur Folgendes befolgt: https://docs.oracle.com/javafx/2/get_started/form.htm und ein Standard-JavaFX-Anwendungsprojekt von Netbeans 8.0.2 verwendet. Einfach ausschneiden und von der Website einfügen.
public class Fxlinetest extends Application {
@Override
public void start(Stage primaryStage) {
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));
Text scenetitle = new Text("Welcome");
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
grid.add(scenetitle, 0, 0, 2, 1);
Label userName = new Label("User Name:");
grid.add(userName, 0, 1);
TextField userTextField = new TextField();
grid.add(userTextField, 1, 1);
Label pw = new Label("Password:");
grid.add(pw, 0, 2);
PasswordField pwBox = new PasswordField();
grid.add(pwBox, 1, 2);
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);
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
Hier ist ein Screenshot der ThreeDOM-Ansicht aus ScenicView 8.6. Beachten Sie die folgende Zeile:
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
Hier ist der Beispielbildschirm mit dem kaspischen Thema über:
System.setProperty("javafx.userAgentStylesheetUrl", "caspian");
Antworten:
Dies ist ein bekannter ungelöster Fehler .
Das Problem scheint zu sein, dass es für die Entwickler nicht reproduzierbar ist.
In den Kommentaren des Fehlerberichts wird die Verwendung eines JVM-Parameters empfohlen:
-Dprism.disableRegionCaching=true
Wenn jedoch jemand diesen sehr seltenen Fehler reproduzieren kann, ist mein Vorschlag:
quelle
Emm ... Ich bin nicht 100% sicher, weil ich die Auswirkungen auf mein JVM nicht habe, obwohl ich eine Linux-Plattform habe. Trotzdem habe ich versucht zu emulieren (? Ich bin mir nicht sicher, ob es mir ziemlich gut gelungen ist), aber ich denke, das von Ihnen beschriebene Problem könnte wirklich damit zusammenhängen
Den von Ihnen dargestellten Code habe ich ein wenig geändert, um zu zeigen, was mit Gridpanel-Linien passiert, wenn sich Komponenten in "irgendeiner" Reihenfolge befinden.
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); } }
Die laufende App sieht so aus:
Bild A:
... so erscheint die schwarze Linie im Textfeld in einer Entfernung von ungefähr 10 Pixel, möglicherweise nur, weil die Vgap auf 10 gesetzt ist; Beachten Sie außerdem, dass der "Willkommenstext" gekreuzt ist, jedoch vertikale Linien aufweist. Getestet habe ich , wenn „nicht Schriftart zu verwenden“ für scenetitle es richtig (siehe Bild) befindet;
Bild B.
Also stimmt vielleicht etwas mit GridPane nicht; Möglicherweise hat das Standard-GridPane "Linien sichtbar" oder so, aber nachdem Komponenten die Zeilen "entsorgt" hinzugefügt haben, aber wegen TextField, das "Text" mit "Schriftart" enthalten sollte (siehe Bild Ein vertikaler Linienkreuztext wegen der Schriftart ), wird das Repaint nicht ausgeführt funktioniert nicht richtig und Sie können die schwarze Linie oben sehen, wie Bild A zeigt; Ich kann den Effekt nicht vollständig emulieren, aber ich kann trotzdem vorschlagen, woher die "nicht entsorgte" Linie kommt oder so :)
Ich werde trotzdem versuchen, ein bisschen weiter zu analysieren. Die Informationen, die ich in dieser Antwort beschreibe, können Ihnen helfen, herauszufinden, wo Sie mit dem Debuggen beginnen können.
Wenn Sie zusätzliche Informationen benötigen, lassen Sie es mich bitte wissen.
Viel Glück :)
Toolkit, das ich zum Testen verwendet habe:
quelle