Moin allerseits
Ein ähnliches Theater wie ich es neulich mit Swing hatte (und ihr mir so toll geholfen habt) verfolgt mich nun mit JavaFX: Wie platziere ich Nodes vernünftig?
Das, was ich vorhabe, soll mal eine tabellenartige Übersicht werden, zunächst will ich aber erstmal eine Art Spaltenheader dafür bauen. Etwas ganz einfaches, eigentlich nur ein Rechteck mit Text, zentriert. Also ein Region-Objekt erstellt, Hintergrund gesetzt, und dann ein Textobjekt eingefügt. Hier erstmal Code und CSS:
Ein Region-Objekt hat eine Contentarea. Diese wird, so verstehe ich das zumindest, von meinem Textobjekt ausgefüllt. Irgendwo in der Doku habe ich gelesen, das der Inhalt auch aus der Contentarea hinaus gehen kann. Um die Contentarea herum gibt es die Paddingarea, um einen Rand um die Contentarea definieren zu können. Erklärt hier:
jenkov.com
Jetzt will ich in meinem CSS das Padding einstellen. Aber egal was ich da mache: Ich bekomme seitliches Padding stets immer nur auf der rechten Seite. Ich mache mal zwei Bilder und schreibe dazu, was ich im CSS eingestellt habe:


Ich habe nun ziemlich viel ausprobiert, aber ich bekomme das Padding absolut nicht sauber links und rechts verteilt. Was ich machen kann, ist, das Textobjekt in der layoutInArea()-Methode weiter rechts zu platzieren. Das verschafft mir auf der linken Seite zwar scheinbar Abstand, hat mit Padding aber nix zu tun: die rechte Seite verhält sich unabhängig davon exakt gleich und summiert die Paddingabstände für links und rechts dort.
Ich habe auch probiert, einen LayoutManager dazuwischenzuschalten und diesen die Platzierung zu überlassen, aber das hat auch nicht funktioniert. Außerdem würde ich das auch deshalb gerne selber machen um das mal zu lernen.
Sieht vielleicht jemand, was ich da falsch mache?
Ein ähnliches Theater wie ich es neulich mit Swing hatte (und ihr mir so toll geholfen habt) verfolgt mich nun mit JavaFX: Wie platziere ich Nodes vernünftig?
Das, was ich vorhabe, soll mal eine tabellenartige Übersicht werden, zunächst will ich aber erstmal eine Art Spaltenheader dafür bauen. Etwas ganz einfaches, eigentlich nur ein Rechteck mit Text, zentriert. Also ein Region-Objekt erstellt, Hintergrund gesetzt, und dann ein Textobjekt eingefügt. Hier erstmal Code und CSS:
Java:
class StamptableHeader extends Region {
StamptableHeader(String text) {
super();
getStylesheets().add(getClass().getResource("centerviewstamptable.css").toExternalForm());
getStyleClass().add("stamptable-header");
initGraphics(text);
}
private void initGraphics(String text) {
Text headerText = new Text(text);
layoutInArea(headerText,
0, 0,
headerText.getLayoutBounds().getWidth(),
headerText.getLayoutBounds().getHeight(),
0,
HPos.CENTER,
VPos.CENTER);
getChildren().addAll(headerText);
}
}
CSS:
.stamptable-header {
-fx-background-color: -fx-box-border, lightgray;
-fx-border-color: black;
-fx-font-weight: bold;
-fx-padding: 0 0 0 10; /* bzw. -fx-padding: 0 10 0 10; */
}
StamptableHeader>Text {
-fx-font-weight: bold;
-fx-text-alignment: center;
}
Ein Region-Objekt hat eine Contentarea. Diese wird, so verstehe ich das zumindest, von meinem Textobjekt ausgefüllt. Irgendwo in der Doku habe ich gelesen, das der Inhalt auch aus der Contentarea hinaus gehen kann. Um die Contentarea herum gibt es die Paddingarea, um einen Rand um die Contentarea definieren zu können. Erklärt hier:

JavaFX Region
The JavaFX Region is a base class for all JavaFX layout classes like Pane etc.
Jetzt will ich in meinem CSS das Padding einstellen. Aber egal was ich da mache: Ich bekomme seitliches Padding stets immer nur auf der rechten Seite. Ich mache mal zwei Bilder und schreibe dazu, was ich im CSS eingestellt habe:
-fx-padding: 0 0 0 10;
(soll eigentlich Padding auf der linken Seite liefern, ist aber stattdessen rechts):
-fx-padding: 0 10 0 10;
(soll eigentlich Padding auf der linken und der rechten Seite liefern, aber stattdessen ist es rechts nun noch breiter):
Ich habe nun ziemlich viel ausprobiert, aber ich bekomme das Padding absolut nicht sauber links und rechts verteilt. Was ich machen kann, ist, das Textobjekt in der layoutInArea()-Methode weiter rechts zu platzieren. Das verschafft mir auf der linken Seite zwar scheinbar Abstand, hat mit Padding aber nix zu tun: die rechte Seite verhält sich unabhängig davon exakt gleich und summiert die Paddingabstände für links und rechts dort.
Ich habe auch probiert, einen LayoutManager dazuwischenzuschalten und diesen die Platzierung zu überlassen, aber das hat auch nicht funktioniert. Außerdem würde ich das auch deshalb gerne selber machen um das mal zu lernen.
Sieht vielleicht jemand, was ich da falsch mache?