Aufgabe 2+3 ausgeführt.
This commit is contained in:
parent
0488d50f79
commit
70dcb3fc71
|
@ -6,6 +6,14 @@ plugins {
|
|||
id 'java'
|
||||
// Apply the application plugin to add support for building a CLI application.
|
||||
id 'application'
|
||||
// Adding JavaFX support and dependencies
|
||||
id 'org.openjfx.javafxplugin' version '0.0.12'
|
||||
}
|
||||
|
||||
// Configuration for JavaFX plugin
|
||||
javafx {
|
||||
version = '17'
|
||||
modules = [ 'javafx.controls', 'javafx.fxml' ]
|
||||
}
|
||||
|
||||
// Project/Module information
|
||||
|
|
|
@ -3,8 +3,6 @@ package ch.zhaw.prog2.calculator;
|
|||
|
||||
import javafx.application.Application;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Insets;
|
||||
|
@ -17,8 +15,28 @@ import javafx.scene.paint.Color;
|
|||
import javafx.stage.Stage;
|
||||
|
||||
public class Main extends Application {
|
||||
|
||||
private static int VERTICAL_GAP = 5;
|
||||
private static int HORIZONTAL_GAP = 10;
|
||||
private Stage primaryStage;
|
||||
private CheckMenuItem clearInitialAmount = new CheckMenuItem("Initial amount");
|
||||
private CheckMenuItem clearReturnInPercent = new CheckMenuItem("Return in %");
|
||||
private CheckMenuItem clearAnnualCosts = new CheckMenuItem("Annual Costs");
|
||||
private CheckMenuItem clearNumberOfYears = new CheckMenuItem("Number of years");
|
||||
private TextField initialAmount = new TextField();
|
||||
private TextField returnInPercent = new TextField();
|
||||
private TextField annualCost = new TextField();
|
||||
private TextField numberOfYears = new TextField();
|
||||
private TextArea results = new TextArea();
|
||||
|
||||
private static final String INFO = """
|
||||
Enter valid values to
|
||||
- Initial amount (> 0)
|
||||
- Return in % (can be +/- or 0)
|
||||
- Annual Costs (> 0)
|
||||
- Number of years (> 0)
|
||||
Calculate displays the annual balance development!";
|
||||
""";
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
|
@ -37,10 +55,14 @@ public class Main extends Application {
|
|||
private void mainWindow() {
|
||||
try {
|
||||
BorderPane rootPane = new BorderPane();
|
||||
//BorderPane top
|
||||
MenuBar menuBar = new MenuBar();
|
||||
createMenu(rootPane);
|
||||
|
||||
// Create scene with root node with size
|
||||
|
||||
createInputOutputPanel(rootPane);
|
||||
|
||||
createButtons(rootPane);
|
||||
|
||||
// Create scene with root node with size
|
||||
Scene scene = new Scene(rootPane, 600, 400);
|
||||
// scene.getStylesheets().add(getClass().getResource("MyLabel.css").toExternalForm());
|
||||
primaryStage.setMinWidth(280);
|
||||
|
@ -55,6 +77,132 @@ public class Main extends Application {
|
|||
}
|
||||
}
|
||||
|
||||
private void createButtons(BorderPane rootPane) {
|
||||
HBox buttons = new HBox(HORIZONTAL_GAP);
|
||||
buttons.setAlignment(Pos.BASELINE_CENTER);
|
||||
|
||||
Button closeButton = new Button("Close");
|
||||
Button calculateButton = new Button("Calculate");
|
||||
closeButton.setOnAction(e -> Platform.exit());
|
||||
calculateButton.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
ValueHandler valueHandler = new ValueHandler();
|
||||
valueHandler.checkValuesAndCalculateResult(initialAmount.getText(), returnInPercent.getText(), annualCost.getText(), numberOfYears.getText());
|
||||
String result = valueHandler.getResultBound();
|
||||
if(valueHandler.areValuesOk()){
|
||||
showResult(result, true, Color.GREEN);
|
||||
} else {
|
||||
showResult(result, false, Color.RED);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttons.getChildren().addAll(calculateButton, closeButton);
|
||||
buttons.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
|
||||
rootPane.setBottom(buttons);
|
||||
}
|
||||
|
||||
private void createInputOutputPanel(BorderPane rootPane) {
|
||||
VBox inputOutputPanel = new VBox(VERTICAL_GAP);
|
||||
GridPane inputPanel = new GridPane();
|
||||
VBox resultRows = new VBox();
|
||||
inputOutputPanel.getChildren().add(inputPanel);
|
||||
inputOutputPanel.getChildren().add(resultRows);
|
||||
|
||||
createInputPanel(inputPanel);
|
||||
|
||||
resultRows.getChildren().add(new Label("Results:"));
|
||||
resultRows.getChildren().add(results);
|
||||
resultRows.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
|
||||
|
||||
rootPane.setCenter(inputOutputPanel);
|
||||
}
|
||||
|
||||
private void createInputPanel(GridPane inputPanel) {
|
||||
inputPanel.setVgap(5);
|
||||
inputPanel.setHgap(5);
|
||||
inputPanel.add(new Label("Initial amount"), 0, 1);
|
||||
inputPanel.add(new Label("Return rate in %"), 0, 2);
|
||||
inputPanel.add(new Label("Annual cost"), 0, 3);
|
||||
inputPanel.add(new Label("Number of years"), 0, 4);
|
||||
inputPanel.add(initialAmount, 1, 1);
|
||||
inputPanel.add(returnInPercent, 1, 2);
|
||||
inputPanel.add(annualCost, 1, 3);
|
||||
inputPanel.add(numberOfYears, 1, 4);
|
||||
inputPanel.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
|
||||
}
|
||||
|
||||
private void createMenu(BorderPane rootPane) {
|
||||
//BorderPane top
|
||||
MenuBar menuBar = new MenuBar();
|
||||
|
||||
Menu clearMenu = new Menu("Clear");
|
||||
Menu helpMenu = new Menu("?");
|
||||
|
||||
// Create MenuItems
|
||||
MenuItem clearValues = new MenuItem("Clear values");
|
||||
clearValues.setId("clearValues");
|
||||
MenuItem clearResults = new MenuItem("Clear results");
|
||||
clearResults.setId("clearResults");
|
||||
MenuItem helpShowText = new MenuItem("Show help");
|
||||
|
||||
clearMenu.getItems().addAll(clearInitialAmount, clearReturnInPercent, clearAnnualCosts, clearNumberOfYears);
|
||||
clearMenu.getItems().addAll(new SeparatorMenuItem(), clearValues, new SeparatorMenuItem(), clearResults);
|
||||
helpMenu.getItems().add(helpShowText);
|
||||
|
||||
menuBar.getMenus().addAll(clearMenu, helpMenu);
|
||||
//using an inner class
|
||||
ClearHandler clearHandler = new ClearHandler();
|
||||
clearValues.addEventHandler(ActionEvent.ACTION, clearHandler);
|
||||
clearResults.addEventHandler(ActionEvent.ACTION, clearHandler);
|
||||
|
||||
helpShowText.setAccelerator(KeyCombination.keyCombination("F1"));
|
||||
helpShowText.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
showResult(INFO, true, Color.BLUE);
|
||||
}
|
||||
});
|
||||
rootPane.setTop(menuBar);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handler to clear the controls
|
||||
*/
|
||||
private class ClearHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
switch (((MenuItem) event.getSource()).getId()) {
|
||||
case "clearValues" -> {
|
||||
if (clearInitialAmount.isSelected()) {
|
||||
initialAmount.clear();
|
||||
}
|
||||
if (clearAnnualCosts.isSelected()) {
|
||||
annualCost.clear();
|
||||
}
|
||||
if (clearNumberOfYears.isSelected()) {
|
||||
numberOfYears.clear();
|
||||
}
|
||||
if (clearReturnInPercent.isSelected()) {
|
||||
returnInPercent.clear();
|
||||
}
|
||||
}
|
||||
case "clearResults" -> results.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showResult(String text, boolean clearFirst, Color backColor){
|
||||
if(clearFirst) {
|
||||
results.setText(text);
|
||||
}else{
|
||||
results.appendText("\n" + text);
|
||||
}
|
||||
results.setBorder(new Border(new BorderStroke(backColor, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(1))));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue