Code: Select all
.test-label {
-fx-background-color: blue;
-fx-border-color: red;
-fx-font-family: "Harlow Solid Italic";
-fx-font-size: 100;
}
< /code>
Es ist ziemlich einfach, das Problem hier zu sehen. Dies kann durch Verwendung der Eigenschaft -fx -Padding
< /p>
Code: Select all
.test-label {
-fx-background-color: blue;
-fx-border-color: red;
-fx-font-family: "Harlow Solid Italic";
-fx-font-size: 100;
-fx-padding: -40 20 0 20;
}
< /code>
Die Augen sind viel einfacher. Als ob es hier kein Problem gäbe - das Problem ist gelöst. Dies ist jedoch nicht der Fall. Während visuell alles in Ordnung zu sein scheint, ist die Registrierung von Mausereignissen leider nicht. Erwägen Sie beispielsweise das Etikett auf die folgende Weise zu machen (vergib mir für alle leichten Fehler hier, ich schneide einen Großteil des Fetts von Manager -Klassen aus, um ein minimal reproduzierbares Beispiel zu machen):
public class MyApp extends Application {
@Override
public void start(Stage stage) {
root = new Pane();
root.setStyle("-fx-background-color: black;");
root.getChildren().add(createTestLabel());
scene = new Scene(root);
scene.getStylesheets().add("/ExampleStylesheet.css");
stage.setScene(scene);
// stage.setMaximized(true); I do this for convenience
stage.show();
}
public static void main(String[] args) {
launch(args);
}
public Label createTestLabel() {
Label testLabel = new Label("Placeholder\nText");
//testLabel.setLayoutX(xPos); for your convenience should you
//testLabel.setLayoutY(yPos); want to test this yourself
testLabel.getStyleClass().add("test-label");
testLabel.setTextAlignment(TextAlignment.CENTER);
//testLabel.setPickOnBounds(false); I include this because it does not make a difference for the issue I'm getting at.
testLabel.setOnMouseEntered(event -> doSomething());
testLabel.setOnMouseExited(event -> doSomethingElse());
return testLabel;
}
public void doSomething() {
//System.out.println("Inside label."); for example
}
public void doSomethingElse() {
//System.out.println("Outside label."); for example
}
}
Der grüne Bereich ist der Bereich, der vom Etikett von der Padding -Eigenschaft abgeschnitten wurde. Obwohl es weg ist, zählt es für Mausereignisse als im Etikett. Etikett. Das möchte ich ändern, denn wenn Sie etwas komplizierteres tun würden Das Etikett ohne es sieht so aus, als ob sich die Maus innerhalb des Randes des Etiketts befindet. Es gilt nicht für Bereiche, die dem Etikett hinzugefügt wurden. In diesem Sinne ist der Bereich links und rechts des Etiketts anklickbar, was Sinn macht und wünschenswert ist. -Padding mit -FX-BORDER-INSETS und -FX-Background-Insets sowie die PickOnbounds -Eigenschaft für das Etikett (wie im Kommentar in dem Kommentar in angezeigt Der Beispielcode oben). Keines von beiden hilft bei der Lösung dieses Problems. Ich kann mir nicht vorstellen, dass dieses Verhalten beabsichtigt ist. Deshalb möchte ich in der Lage sein, die "klickbare Region" des Etiketts als Mittel um das Problem zu manipulieren, daher die Frage - kann ich das tun und wenn ja, wie? < /P>
(Hinweis: Dies ist ein Repost einer alten Frage, die ich im Dezember veröffentlicht habe. Es war zu verwirrend und nicht detailliert genug, um das Problem richtig zu vermitteln. Deshalb habe ich diese Frage seitdem gelöscht, da dies mein zweiter, überarbeiteter Versuch ist die Verwirrungspunkte, die andere mit der ursprünglichen Frage hatten.)