Zwischenstand Views
This commit is contained in:
28
pom.xml
28
pom.xml
@@ -2,7 +2,7 @@
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<artifactId>P4</artifactId>
|
||||
<artifactId>P5</artifactId>
|
||||
<groupId>de.fh_aachen.oos</groupId>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
@@ -12,12 +12,6 @@
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<configuration>
|
||||
<compilerArgs>
|
||||
<arg>--release</arg>
|
||||
<arg>17</arg>
|
||||
</compilerArgs>
|
||||
</configuration>
|
||||
<version>3.13.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
@@ -25,6 +19,14 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<version>3.2.5</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>javafx-maven-plugin</artifactId>
|
||||
<groupId>org.openjfx</groupId>
|
||||
<version>${javafx.maven.plugin.version}</version>
|
||||
<configuration>
|
||||
<mainClass>ui.main</mainClass>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
@@ -39,6 +41,16 @@
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<version>2.11.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>javafx-controls</artifactId>
|
||||
<groupId>org.openjfx</groupId>
|
||||
<version>${javafx.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>javafx-fxml</artifactId>
|
||||
<groupId>org.openjfx</groupId>
|
||||
<version>${javafx.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
@@ -55,6 +67,8 @@
|
||||
|
||||
<properties>
|
||||
<maven.compiler.release>17</maven.compiler.release>
|
||||
<javafx.version>22</javafx.version>
|
||||
<javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
</project>
|
||||
98
src/main/java/ui/AccountviewController.java
Normal file
98
src/main/java/ui/AccountviewController.java
Normal file
@@ -0,0 +1,98 @@
|
||||
package ui;
|
||||
|
||||
import bank.PrivateBank;
|
||||
import bank.Transaction;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AccountviewController {
|
||||
|
||||
@FXML
|
||||
private Label accountNameLabel;
|
||||
|
||||
@FXML
|
||||
private Label balanceLabel;
|
||||
|
||||
@FXML
|
||||
private ListView<String> transactionListView;
|
||||
|
||||
private PrivateBank privateBank;
|
||||
private String currentAccount;
|
||||
|
||||
public void setAccount(String accountName, PrivateBank bank) {
|
||||
this.currentAccount = accountName;
|
||||
this.privateBank = bank;
|
||||
updateAccountInfo();
|
||||
loadTransactions();
|
||||
}
|
||||
|
||||
private void updateAccountInfo() {
|
||||
accountNameLabel.setText("Account: " + currentAccount);
|
||||
double balance = privateBank.getAccountBalance(currentAccount);
|
||||
//balanceLabel.setText("Balance: " + balance);
|
||||
}
|
||||
|
||||
private void loadTransactions() {
|
||||
var transactions = privateBank.getTransactions(currentAccount);
|
||||
showTransactions(transactions);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onBackButtonClicked() {
|
||||
try {
|
||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("/main.fxml"));
|
||||
Parent root = loader.load();
|
||||
|
||||
Stage stage = (Stage) transactionListView.getScene().getWindow();
|
||||
stage.getScene().setRoot(root);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onSortAscending() {
|
||||
var sortedTransactions = privateBank.getTransactionsSorted(currentAccount, true);
|
||||
showTransactions(sortedTransactions);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onSortDescending() {
|
||||
var sortedTransactions = privateBank.getTransactionsSorted(currentAccount, false);
|
||||
showTransactions(sortedTransactions);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onShowPositive() {
|
||||
var positive = privateBank.getTransactionsByType(currentAccount, true);
|
||||
showTransactions(positive);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onShowNegative() {
|
||||
var negative = privateBank.getTransactionsByType(currentAccount, false);
|
||||
showTransactions(negative);
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void onShowAll() {
|
||||
var all = privateBank.getTransactions(currentAccount);
|
||||
showTransactions(all);
|
||||
}
|
||||
|
||||
private void showTransactions(List<Transaction> transactions) {
|
||||
List<String> displayList = new ArrayList<>();
|
||||
for (var t : transactions) {
|
||||
displayList.add(t.toString());
|
||||
}
|
||||
// transactionListView.getItems().setAll(displayList);
|
||||
updateAccountInfo(); // Balance neu anzeigen, falls sich was geändert hat
|
||||
}
|
||||
}
|
||||
129
src/main/java/ui/MainviewController.java
Normal file
129
src/main/java/ui/MainviewController.java
Normal file
@@ -0,0 +1,129 @@
|
||||
package ui;
|
||||
|
||||
import bank.PrivateBank;
|
||||
|
||||
import javafx.fxml.*;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.input.MouseButton;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
public class MainviewController {
|
||||
|
||||
@FXML
|
||||
private ListView<String> accountListView;
|
||||
|
||||
private PrivateBank privateBank; // Referenz auf Ihr Bankobjekt
|
||||
|
||||
public void initialize() {
|
||||
// Bank initialisieren oder übergeben lassen
|
||||
this.privateBank = new PrivateBank(
|
||||
"Bank1",
|
||||
0,
|
||||
0,
|
||||
"accountdata"
|
||||
);
|
||||
|
||||
List<String> accounts = List.of(
|
||||
"Konto1", "Konto2", "Konto3"
|
||||
);
|
||||
|
||||
for (String account : accounts) {
|
||||
try {
|
||||
privateBank.createAccount(account);
|
||||
privateBank.writeAccount(account);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
accountListView.getItems().addAll(privateBank.getAllAccounts());
|
||||
|
||||
// Kontextmenü definieren
|
||||
ContextMenu contextMenu = new ContextMenu();
|
||||
MenuItem selectItem = new MenuItem("Auswählen");
|
||||
MenuItem deleteItem = new MenuItem("Löschen");
|
||||
|
||||
// Aktionen definieren
|
||||
selectItem.setOnAction(event -> {
|
||||
String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
|
||||
if (selectedAccount != null) {
|
||||
switchToAccountView(selectedAccount);
|
||||
}
|
||||
});
|
||||
|
||||
deleteItem.setOnAction(
|
||||
event -> {
|
||||
String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
|
||||
if (selectedAccount != null) {
|
||||
boolean confirmed = showDeleteConfirmation(selectedAccount);
|
||||
if (confirmed) {
|
||||
// Account aus der Bank entfernen
|
||||
try {
|
||||
privateBank.deleteAccount(selectedAccount);
|
||||
// ListView aktualisieren
|
||||
accountListView.getItems().remove(selectedAccount);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// Fehlerbehandlung falls nötig
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
contextMenu.getItems().addAll(selectItem, deleteItem);
|
||||
|
||||
// Kontextmenü an die ListView binden
|
||||
accountListView.setContextMenu(contextMenu);
|
||||
|
||||
// Optional: Double-Click zum Auswählen ohne Kontextmenü
|
||||
accountListView.setOnMouseClicked(
|
||||
event -> {
|
||||
if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) {
|
||||
String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
|
||||
if (selectedAccount != null) {
|
||||
switchToAccountView(selectedAccount);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private void switchToAccountView(String accountName) {
|
||||
try {
|
||||
// Laden der zweiten FXML
|
||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("Accountview.fxml"));
|
||||
Parent root = loader.load();
|
||||
|
||||
// Zugriff auf Controller und Datenübergabe
|
||||
AccountviewController accountController = loader.getController();
|
||||
accountController.setAccount(accountName, privateBank);
|
||||
|
||||
// Scene in der selben Stage wechseln
|
||||
Stage stage = (Stage) accountListView.getScene().getWindow();
|
||||
stage.getScene().setRoot(root);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean showDeleteConfirmation(String accountName) {
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Account löschen");
|
||||
alert.setHeaderText("Soll der Account '" + accountName + "' wirklich gelöscht werden?");
|
||||
alert.setContentText("Diese Aktion kann nicht rückgängig gemacht werden.");
|
||||
|
||||
ButtonType yesButton = new ButtonType("Ja", ButtonBar.ButtonData.YES);
|
||||
ButtonType noButton = new ButtonType("Nein", ButtonBar.ButtonData.NO);
|
||||
|
||||
alert.getButtonTypes().setAll(yesButton, noButton);
|
||||
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
|
||||
return result.isPresent() && result.get() == yesButton;
|
||||
}
|
||||
}
|
||||
20
src/main/java/ui/main.java
Normal file
20
src/main/java/ui/main.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package ui;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
public class main extends Application {
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws Exception {
|
||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("/Mainview.fxml"));
|
||||
Scene scene = new Scene(loader.load());
|
||||
primaryStage.setScene(scene);
|
||||
primaryStage.show();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
}
|
||||
}
|
||||
36
src/main/resources/Accountview.fxml
Normal file
36
src/main/resources/Accountview.fxml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<BorderPane fx:id="root" xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="ui.AccountviewController">
|
||||
|
||||
<top>
|
||||
<HBox spacing="10" alignment="CENTER_LEFT">
|
||||
<!-- Back Button -->
|
||||
<Button text="Back" fx:id="backButton" onAction="#onBackButtonClicked"/>
|
||||
|
||||
<!-- Account Name Label -->
|
||||
<Label fx:id="accountNameLabel" text="Account: "/>
|
||||
|
||||
<!-- Kontostand Label -->
|
||||
<Label fx:id="balanceLabel" text="Balance: "/>
|
||||
</HBox>
|
||||
</top>
|
||||
|
||||
<center>
|
||||
<ListView fx:id="transactionListView" />
|
||||
</center>
|
||||
|
||||
<bottom>
|
||||
<HBox spacing="10" alignment="CENTER">
|
||||
<!-- Buttons / Menüs zur Anzeigeänderung -->
|
||||
<Button text="Aufsteigend sortieren" onAction="#onSortAscending"/>
|
||||
<Button text="Absteigend sortieren" onAction="#onSortDescending"/>
|
||||
<Button text="Nur positive" onAction="#onShowPositive"/>
|
||||
<Button text="Nur negative" onAction="#onShowNegative"/>
|
||||
<Button text="Alle anzeigen" onAction="#onShowAll"/>
|
||||
</HBox>
|
||||
</bottom>
|
||||
</BorderPane>
|
||||
26
src/main/resources/Mainview.fxml
Normal file
26
src/main/resources/Mainview.fxml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<BorderPane fx:id="root" xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="ui.MainviewController">
|
||||
<top>
|
||||
<MenuBar>
|
||||
<Menu text="Datei">
|
||||
<MenuItem text="Neu"/>
|
||||
<MenuItem text="Öffnen"/>
|
||||
<MenuItem text="Beenden"/>
|
||||
</Menu>
|
||||
<Menu text="Hilfe">
|
||||
<MenuItem text="Über..."/>
|
||||
</Menu>
|
||||
</MenuBar>
|
||||
</top>
|
||||
|
||||
<center>
|
||||
<ListView fx:id="accountListView"/>
|
||||
</center>
|
||||
</BorderPane>
|
||||
|
||||
|
||||
@@ -492,4 +492,16 @@ public class PrivateBankTest {
|
||||
);
|
||||
}
|
||||
|
||||
@DisplayName("Get all accounts")
|
||||
@Order(22)
|
||||
@Test
|
||||
public void testGetAllAccounts() {
|
||||
List<String> expectedAccounts = List.of(
|
||||
"Konto_1", "Konto_3", "Konto_2", "Konto_5", "Konto_4", "Konto_7", "Konto_6", "Konto_8"
|
||||
);
|
||||
assertEquals(
|
||||
expectedAccounts,
|
||||
privateBank.getAllAccounts()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user