summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/fbin/java2fx/tables
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-05-04 22:11:28 +0200
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-05-04 22:11:28 +0200
commit3b5728de6f2d8d2852fbb86fa8cac21e6dccc19b (patch)
tree54965319a9aafeb294dac8e36e4ce1371ec76ef3 /src/de/fhswf/fbin/java2fx/tables
parentaf7b9bd6a962b9a290fc5d78c08c83653961811f (diff)
downloadJava2-3b5728de6f2d8d2852fbb86fa8cac21e6dccc19b.tar.gz
Java2-3b5728de6f2d8d2852fbb86fa8cac21e6dccc19b.zip
Build a file browser looking like Finder
Diffstat (limited to 'src/de/fhswf/fbin/java2fx/tables')
-rw-r--r--src/de/fhswf/fbin/java2fx/tables/CheckBoxTableCellFactory.java16
-rw-r--r--src/de/fhswf/fbin/java2fx/tables/DatePickerTableCell.java88
-rw-r--r--src/de/fhswf/fbin/java2fx/tables/LocalDateTimeTableCellFactory.java37
-rw-r--r--src/de/fhswf/fbin/java2fx/tables/NumberTableCellFactory.java35
4 files changed, 176 insertions, 0 deletions
diff --git a/src/de/fhswf/fbin/java2fx/tables/CheckBoxTableCellFactory.java b/src/de/fhswf/fbin/java2fx/tables/CheckBoxTableCellFactory.java
new file mode 100644
index 0000000..f609860
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/tables/CheckBoxTableCellFactory.java
@@ -0,0 +1,16 @@
+package de.fhswf.fbin.java2fx.tables;
+
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.cell.CheckBoxTableCell;
+import javafx.util.Callback;
+
+public class CheckBoxTableCellFactory<S> implements Callback<TableColumn<S, Boolean>, TableCell<S, Boolean>>
+{
+ @Override
+ public TableCell<S, Boolean> call(
+ TableColumn<S, Boolean> param)
+ {
+ return new CheckBoxTableCell<S, Boolean>();
+ }
+}
diff --git a/src/de/fhswf/fbin/java2fx/tables/DatePickerTableCell.java b/src/de/fhswf/fbin/java2fx/tables/DatePickerTableCell.java
new file mode 100644
index 0000000..c68edbb
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/tables/DatePickerTableCell.java
@@ -0,0 +1,88 @@
+package de.fhswf.fbin.java2fx.tables;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.DatePicker;
+import javafx.scene.control.TableCell;
+
+public class DatePickerTableCell<S> extends TableCell<S, LocalDate>
+{
+ private DatePicker datePicker;
+
+ @Override
+ public void startEdit()
+ {
+ if (!isEmpty())
+ {
+ super.startEdit();
+ createDatePicker();
+ setText(null);
+ setGraphic(datePicker);
+ }
+ }
+
+ @Override
+ public void cancelEdit()
+ {
+ super.cancelEdit();
+
+ setText(getItem().format(DateTimeFormatter.RFC_1123_DATE_TIME));
+ setGraphic(null);
+ }
+
+ @Override
+ public void updateItem(LocalDate item, boolean empty)
+ {
+ super.updateItem(item, empty);
+
+ if (empty)
+ {
+ setText(null);
+ setGraphic(null);
+ }
+ else
+ {
+ if (isEditing())
+ {
+ if (datePicker != null)
+ {
+ datePicker.setValue(item);
+ }
+ setText(null);
+ setGraphic(datePicker);
+ }
+ else
+ {
+ setText(item.format(DateTimeFormatter.RFC_1123_DATE_TIME));
+ setGraphic(null);
+ }
+ }
+ }
+
+ private void createDatePicker()
+ {
+ datePicker = new DatePicker();
+ datePicker.setValue(getItem());
+ datePicker.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
+ datePicker.focusedProperty().addListener(new ChangeListener<Boolean>()
+ {
+ @Override
+ public void changed(ObservableValue<? extends Boolean> arg0,
+ Boolean oldVAlue, Boolean newValue)
+ {
+ if (!newValue)
+ {
+ commitEdit(datePicker.getValue());
+ }
+ }
+ });
+ }
+
+ private String getString()
+ {
+ return getItem() == null ? "" : getItem().format(DateTimeFormatter.RFC_1123_DATE_TIME);
+ }
+}
diff --git a/src/de/fhswf/fbin/java2fx/tables/LocalDateTimeTableCellFactory.java b/src/de/fhswf/fbin/java2fx/tables/LocalDateTimeTableCellFactory.java
new file mode 100644
index 0000000..0c5c41d
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/tables/LocalDateTimeTableCellFactory.java
@@ -0,0 +1,37 @@
+package de.fhswf.fbin.java2fx.tables;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.util.Callback;
+
+public class LocalDateTimeTableCellFactory<S> implements
+ Callback<TableColumn<S, LocalDateTime>, TableCell<S, LocalDateTime>>
+{
+ @Override
+ public TableCell<S, LocalDateTime> call(TableColumn<S, LocalDateTime> param)
+ {
+ return new TableCell<S, LocalDateTime>()
+ {
+ @Override
+ protected void updateItem(LocalDateTime item, boolean empty)
+ {
+ super.updateItem(item, empty);
+
+ if (!empty)
+ {
+ ZonedDateTime zdt = ZonedDateTime.of(item, ZoneId.systemDefault());
+ setText(zdt.format(DateTimeFormatter.RFC_1123_DATE_TIME));
+ }
+ else
+ {
+ setText(null);
+ }
+ }
+ };
+ }
+}
diff --git a/src/de/fhswf/fbin/java2fx/tables/NumberTableCellFactory.java b/src/de/fhswf/fbin/java2fx/tables/NumberTableCellFactory.java
new file mode 100644
index 0000000..2bfce82
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/tables/NumberTableCellFactory.java
@@ -0,0 +1,35 @@
+package de.fhswf.fbin.java2fx.tables;
+
+import javafx.geometry.Pos;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.util.Callback;
+
+public class NumberTableCellFactory<S>
+ implements
+ Callback<TableColumn<S, Number>, TableCell<S, Number>>
+{
+ @Override
+ public TableCell<S, Number> call(
+ TableColumn<S, Number> param)
+ {
+ return (TableCell<S, Number>) new TableCell<S, Number>()
+ {
+ @Override
+ protected void updateItem(Number item, boolean empty)
+ {
+ super.updateItem(item, empty);
+
+ if (!empty)
+ {
+ setText(item.toString());
+ setAlignment(Pos.TOP_RIGHT);
+ }
+ else
+ {
+ setText(null);
+ }
+ }
+ };
+ }
+}