From 7bb15c1a7e65461f7e875b253262cca36db42349 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 8 Aug 2017 19:10:46 +0200 Subject: [PATCH] Fixed #137 - report table weird behaviour --- .../budgetmaster/ui/ReportController.java | 148 ++++++++++++++---- 1 file changed, 114 insertions(+), 34 deletions(-) diff --git a/src/de/deadlocker8/budgetmaster/ui/ReportController.java b/src/de/deadlocker8/budgetmaster/ui/ReportController.java index 5654bcca5..36a71134e 100644 --- a/src/de/deadlocker8/budgetmaster/ui/ReportController.java +++ b/src/de/deadlocker8/budgetmaster/ui/ReportController.java @@ -6,8 +6,6 @@ import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.Optional; @@ -47,6 +45,7 @@ import javafx.scene.control.TableColumn.CellDataFeatures; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.stage.FileChooser; import javafx.stage.Modality; @@ -103,24 +102,34 @@ public class ReportController implements Refreshable private void initColumnPosition() { - TableColumn<ReportItem, Integer> columnPosition = new TableColumn<>("Nr."); + TableColumn<ReportItem, Integer> columnPosition = new TableColumn<>(); columnPosition.setUserData(ColumnType.POSITION); columnPosition.setCellValueFactory(new PropertyValueFactory<ReportItem, Integer>("position")); columnPosition.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnPosition = new HBox(); + hboxColumnPosition.setAlignment(Pos.CENTER); + hboxColumnPosition.setSpacing(3); + CheckBox checkBoxPositions = new CheckBox(); checkBoxPositions.setSelected(true); + hboxColumnPosition.getChildren().add(checkBoxPositions); + + Label labelColumnPosition = new Label("Nr."); + hboxColumnPosition.getChildren().add(labelColumnPosition); + checkBoxPositions.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnPosition.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnPosition.setStyle(style); columnFilter.toggleColumn(ColumnType.POSITION, c); }); - columnPosition.setGraphic(checkBoxPositions); + columnPosition.setGraphic(hboxColumnPosition); tableView.getColumns().add(columnPosition); } private void initColumnDate() { - TableColumn<ReportItem, String> columnDate = new TableColumn<>("Datum"); + TableColumn<ReportItem, String> columnDate = new TableColumn<>(); columnDate.setUserData(ColumnType.DATE); columnDate.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ReportItem, String>, ObservableValue<String>>() { @@ -144,21 +153,31 @@ public class ReportController implements Refreshable } }); columnDate.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnDate = new HBox(); + hboxColumnDate.setAlignment(Pos.CENTER); + hboxColumnDate.setSpacing(3); + CheckBox checkBoxDate = new CheckBox(); checkBoxDate.setSelected(true); + hboxColumnDate.getChildren().add(checkBoxDate); + + Label labelComlumnDate = new Label("Datum"); + hboxColumnDate.getChildren().add(labelComlumnDate); + checkBoxDate.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnDate.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnDate.setStyle(style); columnFilter.toggleColumn(ColumnType.DATE, c); }); - columnDate.setGraphic(checkBoxDate); + columnDate.setGraphic(hboxColumnDate); columnDate.setComparator(new DateComparator()); tableView.getColumns().add(columnDate); } private void initColumnIsRepeating() { - TableColumn<ReportItem, Boolean> columnIsRepeating = new TableColumn<>("Wiederholend"); + TableColumn<ReportItem, Boolean> columnIsRepeating = new TableColumn<>(); columnIsRepeating.setUserData(ColumnType.REPEATING); columnIsRepeating.setCellValueFactory(new PropertyValueFactory<ReportItem, Boolean>("repeating")); columnIsRepeating.setCellFactory(new Callback<TableColumn<ReportItem, Boolean>, TableCell<ReportItem, Boolean>>() @@ -194,20 +213,31 @@ public class ReportController implements Refreshable } }); columnIsRepeating.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnIsRepeating = new HBox(); + hboxColumnIsRepeating.setAlignment(Pos.CENTER); + hboxColumnIsRepeating.setSpacing(3); + CheckBox checkBoxRepeating = new CheckBox(); checkBoxRepeating.setSelected(true); + hboxColumnIsRepeating.getChildren().add(checkBoxRepeating); + + Label labelColumnIsRepeating = new Label("Wiederholend"); + hboxColumnIsRepeating.getChildren().add(labelColumnIsRepeating); + checkBoxRepeating.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnIsRepeating.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnIsRepeating.setStyle(style); columnFilter.toggleColumn(ColumnType.REPEATING, c); }); - columnIsRepeating.setGraphic(checkBoxRepeating); + + columnIsRepeating.setGraphic(hboxColumnIsRepeating); tableView.getColumns().add(columnIsRepeating); } private void initColumnCategory() { - TableColumn<ReportItem, String> columnCategory = new TableColumn<>("Kategorie"); + TableColumn<ReportItem, String> columnCategory = new TableColumn<>(); columnCategory.setUserData(ColumnType.CATEGORY); columnCategory.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ReportItem, String>, ObservableValue<String>>() { @@ -223,54 +253,84 @@ public class ReportController implements Refreshable } }); columnCategory.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnCategory = new HBox(); + hboxColumnCategory.setAlignment(Pos.CENTER); + hboxColumnCategory.setSpacing(3); + CheckBox checkBoxCategory = new CheckBox(); checkBoxCategory.setSelected(true); + hboxColumnCategory.getChildren().add(checkBoxCategory); + + Label labelColumnCategory = new Label("Kategorie"); + hboxColumnCategory.getChildren().add(labelColumnCategory); + checkBoxCategory.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnCategory.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnCategory.setStyle(style); columnFilter.toggleColumn(ColumnType.CATEGORY, c); }); - columnCategory.setGraphic(checkBoxCategory); + columnCategory.setGraphic(hboxColumnCategory); tableView.getColumns().add(columnCategory); } private void initColumnName() { - TableColumn<ReportItem, Integer> columnName = new TableColumn<>("Name"); + TableColumn<ReportItem, Integer> columnName = new TableColumn<>(); columnName.setUserData(ColumnType.NAME); columnName.setCellValueFactory(new PropertyValueFactory<ReportItem, Integer>("name")); columnName.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnName = new HBox(); + hboxColumnName.setAlignment(Pos.CENTER); + hboxColumnName.setSpacing(3); + CheckBox checkBoxName = new CheckBox(); checkBoxName.setSelected(true); + hboxColumnName.getChildren().add(checkBoxName); + + Label labelColumnName = new Label("Name"); + hboxColumnName.getChildren().add(labelColumnName); + checkBoxName.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnName.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnName.setStyle(style); columnFilter.toggleColumn(ColumnType.NAME, c); }); - columnName.setGraphic(checkBoxName); + columnName.setGraphic(hboxColumnName); tableView.getColumns().add(columnName); } private void initColumnDescription() { - TableColumn<ReportItem, String> columnDescription = new TableColumn<>("Notiz"); + TableColumn<ReportItem, String> columnDescription = new TableColumn<>(); columnDescription.setUserData(ColumnType.DESCRIPTION); columnDescription.setCellValueFactory(new PropertyValueFactory<ReportItem, String>("description")); columnDescription.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnDescription = new HBox(); + hboxColumnDescription.setAlignment(Pos.CENTER); + hboxColumnDescription.setSpacing(3); + CheckBox checkBoxDescription = new CheckBox(); checkBoxDescription.setSelected(true); + hboxColumnDescription.getChildren().add(checkBoxDescription); + + Label labelColumnDescription = new Label("Notiz"); + hboxColumnDescription.getChildren().add(labelColumnDescription); + checkBoxDescription.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnDescription.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnDescription.setStyle(style); columnFilter.toggleColumn(ColumnType.DESCRIPTION, c); }); - columnDescription.setGraphic(checkBoxDescription); + columnDescription.setGraphic(hboxColumnDescription); tableView.getColumns().add(columnDescription); } private void initColumnRating() { - TableColumn<ReportItem, Integer> columnRating = new TableColumn<>("Bewertung"); + TableColumn<ReportItem, Integer> columnRating = new TableColumn<>(); columnRating.setUserData(ColumnType.RATING); columnRating.setCellValueFactory(new PropertyValueFactory<ReportItem, Integer>("amount")); columnRating.setCellFactory(new Callback<TableColumn<ReportItem, Integer>, TableCell<ReportItem, Integer>>() @@ -305,21 +365,31 @@ public class ReportController implements Refreshable } }); columnRating.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnRating = new HBox(); + hboxColumnRating.setAlignment(Pos.CENTER); + hboxColumnRating.setSpacing(3); + CheckBox checkBoxRating = new CheckBox(); checkBoxRating.setSelected(true); + hboxColumnRating.getChildren().add(checkBoxRating); + + Label labelColumnRating = new Label("Bewertung"); + hboxColumnRating.getChildren().add(labelColumnRating); + checkBoxRating.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnRating.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnRating.setStyle(style); columnFilter.toggleColumn(ColumnType.RATING, c); }); - columnRating.setGraphic(checkBoxRating); + columnRating.setGraphic(hboxColumnRating); columnRating.setComparator(new RatingComparator()); tableView.getColumns().add(columnRating); } private void initColumnAmount() { - TableColumn<ReportItem, String> columnAmount = new TableColumn<>("Betrag"); + TableColumn<ReportItem, String> columnAmount = new TableColumn<>(); columnAmount.setUserData(ColumnType.AMOUNT); columnAmount.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ReportItem, String>, ObservableValue<String>>() { @@ -333,14 +403,24 @@ public class ReportController implements Refreshable } }); columnAmount.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnAmount = new HBox(); + hboxColumnAmount.setAlignment(Pos.CENTER); + hboxColumnAmount.setSpacing(3); + CheckBox checkBoxAmount = new CheckBox(); checkBoxAmount.setSelected(true); + hboxColumnAmount.getChildren().add(checkBoxAmount); + + Label labelColumnAmount = new Label("Betrag"); + hboxColumnAmount.getChildren().add(labelColumnAmount); + checkBoxAmount.selectedProperty().addListener((a, b, c)->{ - String style = c ? "-fx-alignment: CENTER;" : "-fx-background-color: salmon; -fx-alignment: CENTER;"; - columnAmount.setStyle(style); + String style = c ? "" : "-fx-background-color: salmon;"; + hboxColumnAmount.setStyle(style); columnFilter.toggleColumn(ColumnType.AMOUNT, c); }); - columnAmount.setGraphic(checkBoxAmount); + columnAmount.setGraphic(hboxColumnAmount); tableView.getColumns().add(columnAmount); } -- GitLab