Johannes 10 лет назад
Родитель
Сommit
7a16725c6d
5 измененных файлов: 215 добавлений и 4 удалений
  1. +4
    -1
      src/main/java/de/uniluebeck/mi/projmi6/Main.java
  2. +168
    -0
      src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java
  3. +34
    -0
      src/main/java/de/uniluebeck/mi/projmi6/view/NumberTextField.java
  4. +9
    -3
      src/main/resources/stationshistorie.fxml
  5. +0
    -0
      src/main/resources/style.css

+ 4
- 1
src/main/java/de/uniluebeck/mi/projmi6/Main.java Просмотреть файл

@@ -57,7 +57,10 @@ public class Main extends Application {

Stage loadingMessage = createLoadWindow();


loadMainWindowTask.setOnFailed(event -> {
loadMainWindowTask.getException().printStackTrace();
loadingMessage.close();
});
loadMainWindowTask.setOnSucceeded(event -> {
Parent root = loadMainWindowTask.getValue();



+ 168
- 0
src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java Просмотреть файл

@@ -0,0 +1,168 @@
package de.uniluebeck.mi.projmi6.view;

import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.IntegerPropertyBase;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.time.LocalDateTime;
/**
* A picker for date and time, composed from a DatePicker and two ComboBoxes. It also has an optional Button to set
* date and time to the current system time.
*
* @author Johannes Oehm
*/
public class DateTimePicker extends HBox {
private DatePicker datePicker = new DatePicker();
//private ComboBox<Integer> hourPicker = new ComboBox<>();
// private ComboBox<Integer> minutePicker = new ComboBox<>();
private NumberTextField hourText = new NumberTextField();
private NumberTextField minuteText = new NumberTextField();
private Button btnNow = new Button("Jetzt");

private Effect invalidValue = new DropShadow(10, Color.RED);


/**
* Empty constructor for the FXMLLoader.
*/
public DateTimePicker(){
this.setAlignment(Pos.CENTER);
hourText.setOnKeyReleased(event ->{
if(hourText.getCaretPosition()>=2){
int hour = Integer.parseInt(hourText.getText());
if(hour>=0 && hour <= 24){
minuteText.requestFocus();
}
}
});
hourText.setAlignment(Pos.CENTER_RIGHT);
hourText.setBackground(null);
hourText.setPadding(Insets.EMPTY);
hourText.setPromptText("HH");
HBox.setHgrow(hourText, Priority.ALWAYS);
minuteText.setBackground(null);
minuteText.setPadding(Insets.EMPTY);
minuteText.setPromptText("MM");
HBox.setHgrow(minuteText, Priority.ALWAYS);

hourText.effectProperty().bind(Bindings.<Effect>createObjectBinding(()->{
String text = hourText.getText();
if(text.isEmpty()){
return null;
}

int value = Integer.parseInt(text);
if(value>=0&&value<24){
return null;
}
return invalidValue;
}, hourText.textProperty()));

minuteText.effectProperty().bind(Bindings.<Effect>createObjectBinding(()->{
String text = minuteText.getText();
if(text.isEmpty()){
return null;
}

int value = Integer.parseInt(text);
if(value>=0&&value<59){
return null;
}
return invalidValue;
}, minuteText.textProperty()));
Label colon = new Label(":");

HBox timePicker = new HBox(hourText, colon,minuteText);
timePicker.maxHeightProperty().bind(datePicker.heightProperty());
timePicker.setMaxWidth(140);
timePicker.getStyleClass().add("button");

//Set Now-Button action
btnNow.setOnAction(event -> setToCurrentDateTime());


//Add the subcomponents to the view.
this.getChildren().addAll(datePicker,timePicker,btnNow);
}




/**
* Setter for the DateTime that is set in the view.
* @param localDateTime The date to be set in the view.
*/
public void setDateTime(LocalDateTime localDateTime){
hourText.setText(Integer.toString(localDateTime.getHour()));
minuteText.setText(Integer.toString(localDateTime.getMinute()));
datePicker.setValue(LocalDate.from(localDateTime));
}

/**
* Sets the date set in the view to the current systems time.
*/
public void setToCurrentDateTime(){
setDateTime(LocalDateTime.now());
}


/**
* Getter for date and time that is currently set in the view.
* @return A LocalDateTime object or null, if one or more fields are not set.
*/
public LocalDateTime getDateTime(){
if(datePicker.getValue()==null ){
return null;
}
try{
int hour = Integer.parseInt( hourText.getText());
int minute = Integer.parseInt(minuteText.getText());
if(hour>=24|| hour<0||minute<0||minute>=60){
return null;
}
return LocalDateTime.of(datePicker.getValue(), LocalTime.of(hour, minute));
}catch (Exception e){
return null;
}
}

/**
* A property for hiding the "Set date and time to now"-Button.
* @return A BooleanProperty, true if the button is visible.
*/
public BooleanProperty nowButtonVisiblePropety(){
return btnNow.visibleProperty();
}

/**
* Setter for the {@link DateTimePicker#nowButtonVisiblePropety}.
* @param visible When set to true, the button will be shown.
*/
public void setNowButtonVisible(boolean visible){
btnNow.setVisible(visible);
}

/**
* Getter for the {@link DateTimePicker#nowButtonVisiblePropety}.
* @return true if the now-Button is visible, false otherwise.
*/
public boolean isNowButtonVisible(){
return btnNow.isVisible();
}


}

+ 34
- 0
src/main/java/de/uniluebeck/mi/projmi6/view/NumberTextField.java Просмотреть файл

@@ -0,0 +1,34 @@
package de.uniluebeck.mi.projmi6.view;


import javafx.scene.control.TextField;

/**
* based on http://blog.axxg.de/javafx-textfield-beschraenken/
*
* TextField that only allows two numbers.
*
* Created by Johannes on 14/11/2015.
*/
public class NumberTextField extends TextField {



@Override
public void replaceText(int start, int end, String text) {
int charactersRemoved = end -start;
int charactersAdded = text.length();
if ((text.matches("[0-9]")||text.length()==0) && getText().length()-charactersRemoved+charactersAdded <=2) {
super.replaceText(start, end, text);
}
}

@Override
public void replaceSelection(String text) {
int newTextLength = getText().length()-getSelectedText().length()+text.length();
if (newTextLength<=2 && (text.matches("[0-9]")||text.length()==0)) {
super.replaceSelection(text);
}
}

}

+ 9
- 3
src/main/resources/stationshistorie.fxml Просмотреть файл

@@ -2,12 +2,14 @@

<?import javafx.geometry.*?>
<?import javafx.scene.text.*?>
<?import java.net.* ?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import de.uniluebeck.mi.projmi6.view.*?>


<SplitPane fx:controller="de.uniluebeck.mi.projmi6.controller.StationsHistorieController" dividerPositions="0.45" xmlns="http://javafx.com/javafx/8"
<SplitPane fx:controller="de.uniluebeck.mi.projmi6.controller.StationsHistorieController" dividerPositions="0.45" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1">
<items>
<VBox>
@@ -44,13 +46,14 @@
<Label text="Abteilung"/>
<Label text="Station" GridPane.rowIndex="1"/>
<Label text="Aufnahmedatum / -Zeit" GridPane.rowIndex="2"/>
<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="2">
<DateTimePicker GridPane.columnIndex="1" GridPane.rowIndex="2"/>
<!--<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="2">
<children>
<DatePicker GridPane.columnIndex="1" GridPane.rowIndex="2"/>
<TextField prefColumnCount="10" promptText="HH:MM"/>
<Button mnemonicParsing="false" text="Jetzt"/>
</children>
</HBox>
</HBox>-->
<Label text="Entlassungsdatum/ -Zeit" GridPane.rowIndex="3"/>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1"
GridPane.rowIndex="3">
@@ -95,4 +98,7 @@
</children>
</VBox>
</items>
<stylesheets>
<URL value="@style.css" />
</stylesheets>
</SplitPane>

+ 0
- 0
src/main/resources/style.css Просмотреть файл


Загрузка…
Отмена
Сохранить