-
Bug
-
Resolution: Fixed
-
P3
-
8u102, 9
This happens when the styleclass of its tableColumn is changed. An example of a "custom" style is "nested-column-header" (but note: it's really only an example, happens to all custom styles in all custom header!)
Below is an example that demonstrates the effect: it has a custom style rule for a nested column under a nested column (white background and padding to see). Run and
- see the custom style in the second column
- click on the button to add a style to the tableColumn
- expected: custom style unchanged
- actual: custom style vanished
Reason: TableColumnHeader has a listener to the column's styleClass which overwrites any custom settings.
import java.net.URL;
//import de.swingempire.fx.utils.FXUtils;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
* TableColumnHeader: Custom styles are lost. Here the "custom" is
* nested-column-header.
*
* @author Jeanette Winzenburg, Berlin
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class BugColumnHeaderStyle extends Application {
private Parent getContent() {
TableView table = new TableView();
TableColumn single = new TableColumn("Single");
TableColumn nested = new TableColumn("Nested");
TableColumn childOne = new TableColumn("Child One");
TableColumn childTwo = new TableColumn("Child Two");
nested.getColumns().addAll(childOne, childTwo);
table.getColumns().addAll(single, nested);
Button addStyle = new Button("add style to TableColumn");
addStyle.setOnAction(e -> nested.getStyleClass().add("dummy"));
BorderPane pane = new BorderPane(table);
pane.setBottom(addStyle);
return pane;
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setScene(new Scene(getContent(), 600, 400));
URL uri = getClass().getResource("headers.css");
primaryStage.getScene().getStylesheets().add(uri.toExternalForm());
// primaryStage.setTitle(FXUtils.version());
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Content of headers.css:
/**
* Just want to see an effect, doesn't matter what
*/
.nested-column-header > .nested-column-header {
-fx-padding: 10;
-fx-background-color: white;
}
Below is an example that demonstrates the effect: it has a custom style rule for a nested column under a nested column (white background and padding to see). Run and
- see the custom style in the second column
- click on the button to add a style to the tableColumn
- expected: custom style unchanged
- actual: custom style vanished
Reason: TableColumnHeader has a listener to the column's styleClass which overwrites any custom settings.
import java.net.URL;
//import de.swingempire.fx.utils.FXUtils;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
* TableColumnHeader: Custom styles are lost. Here the "custom" is
* nested-column-header.
*
* @author Jeanette Winzenburg, Berlin
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class BugColumnHeaderStyle extends Application {
private Parent getContent() {
TableView table = new TableView();
TableColumn single = new TableColumn("Single");
TableColumn nested = new TableColumn("Nested");
TableColumn childOne = new TableColumn("Child One");
TableColumn childTwo = new TableColumn("Child Two");
nested.getColumns().addAll(childOne, childTwo);
table.getColumns().addAll(single, nested);
Button addStyle = new Button("add style to TableColumn");
addStyle.setOnAction(e -> nested.getStyleClass().add("dummy"));
BorderPane pane = new BorderPane(table);
pane.setBottom(addStyle);
return pane;
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setScene(new Scene(getContent(), 600, 400));
URL uri = getClass().getResource("headers.css");
primaryStage.getScene().getStylesheets().add(uri.toExternalForm());
// primaryStage.setTitle(FXUtils.version());
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Content of headers.css:
/**
* Just want to see an effect, doesn't matter what
*/
.nested-column-header > .nested-column-header {
-fx-padding: 10;
-fx-background-color: white;
}
- relates to
-
JDK-8188164 Visual glitch / layout issue when setting pref height of table column headers
-
- Resolved
-