Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ARMIN HAMZIC
- pkg: CONTROLLER
- //RUNNERCONTROLLER
- package controller;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import model.Repository;
- import javafx.event.ActionEvent;
- import javafx.fxml.FXML;
- import javafx.fxml.Initializable;
- import javafx.scene.control.*;
- import javafx.scene.control.cell.PropertyValueFactory;
- import javafx.scene.input.MouseEvent;
- import model.Runner;
- import java.net.URL;
- import java.util.*;
- public class RunnerController implements Initializable {
- @FXML
- private Button btntoCsv;
- @FXML
- private TableView<Runner> tableView;
- @FXML
- private ListView<Runner> listView;
- @FXML
- private Button btnEdit;
- @FXML
- private Button btnNew;
- @FXML
- private Button btnDelete;
- @FXML
- private Button btnSave;
- @FXML
- private Button btnCancel;
- @FXML
- private TextField tfName;
- @FXML
- private TextField tfPhonenumber;
- @FXML
- private TextField tfAddresse;
- @FXML
- private TextField tfSearch;
- @FXML
- private Button btnSearch;
- @FXML
- private TextField tfId;
- @FXML
- private void onCancelAction(ActionEvent actionEvent) {
- newContact = false;
- setEditFiedlsDisable(true);
- if(tableView.getSelectionModel().getSelectedItem() == null)clearEditFields();
- }
- @FXML
- private void onSaveAction(ActionEvent actionEvent) {
- Runner item;
- if(newContact && !tfName.getText().equals("")){
- item = new Runner(tfName.getText(),tfPhonenumber.getText(),tfAddresse.getText());
- repository.add(item);
- olRunners.clear();
- olRunners.addAll(repository.getItems());
- tfSearch.setText("");
- clearEditFields();
- }
- else {
- item = tableView.getSelectionModel().getSelectedItem();
- saveContactFromEditFields(item);
- }
- setEditFiedlsDisable(true);
- tableView.refresh();
- newContact = false;
- }
- @FXML
- private void onDeleteAction(ActionEvent actionEvent) {
- Runner item = tableView.getSelectionModel().getSelectedItem();
- repository.remove(item);
- olRunners.clear();
- olRunners.addAll(repository.getItems());
- }
- @FXML
- private void onNewAction(ActionEvent actionEvent) {
- tableView.getSelectionModel().select(null);
- newContact = true;
- setEditFiedlsDisable(false);
- clearEditFields();
- tfId.setText(Integer.toString(Runner.getIndex()+1));
- }
- @FXML
- private void onEditAction(ActionEvent actionEvent) {
- newContact = false;
- if(tableView.getSelectionModel().getSelectedItem() != null) setEditFiedlsDisable(false);
- }
- @FXML
- private void onContextsClicked(MouseEvent mouseEvent) {
- Runner item = tableView.getSelectionModel().getSelectedItem();
- if(item != null)setContactToEditFields(item);
- }
- @FXML
- private void onSearchAction(ActionEvent actionEvent) {
- olRunners.clear();
- olRunners.addAll(repository.getItems());
- String text = tfSearch.getText();
- for (int i = 0; i < olRunners.size(); i++) {
- if(!olRunners.get(i).getName().toLowerCase().contains(text.toLowerCase())){
- olRunners.remove(olRunners.get(i));
- i--;
- }
- }
- }
- private Repository repository = Repository.getInstance();
- private ObservableList<Runner> olRunners;
- private boolean newContact = false;
- @Override
- public void initialize(URL location, ResourceBundle resources) {
- Runner[] runners = repository.getItems();
- LinkedList<Runner> runnerList = new LinkedList<>();
- Collections.addAll(runnerList, runners);
- olRunners = FXCollections.observableList(runnerList);
- TableColumn<Runner,Integer> idcol = new TableColumn<>("ID");
- TableColumn<Runner,String> namecol= new TableColumn<>("Name");
- TableColumn<Runner,String> telcol= new TableColumn<>("Phone Number");
- TableColumn<Runner,String> addrescol= new TableColumn<>("Addresse");
- idcol.setCellValueFactory(new PropertyValueFactory<>("id"));
- namecol.setCellValueFactory(new PropertyValueFactory<>("name"));
- telcol.setCellValueFactory(new PropertyValueFactory<>("phonenumber"));
- addrescol.setCellValueFactory(new PropertyValueFactory<>("addresse"));
- tableView.setItems(olRunners);
- tableView.getColumns().addAll(idcol,namecol,telcol,addrescol);
- }
- private void setEditFiedlsDisable(boolean value){
- tfName.setDisable(value);
- tfPhonenumber.setDisable(value);
- tfAddresse.setDisable(value);
- }
- private void clearEditFields(){
- tfId.setText("");
- tfName.setText("");
- tfPhonenumber.setText("");
- tfAddresse.setText("");
- }
- private void setContactToEditFields(Runner runner){
- tfId.setText(Integer.toString(runner.getId()));
- tfName.setText(runner.getName());
- tfPhonenumber.setText(runner.getPhonenumber());
- tfAddresse.setText(runner.getAddresse());
- }
- private void saveContactFromEditFields(Runner runner){
- if(runner != null && !tfName.getText().equals("")){
- runner.setName(tfName.getText());
- runner.setPhonenumber(tfPhonenumber.getText());
- runner.setAddresse(tfAddresse.getText());
- repository.update(runner);
- }
- }
- public void onToCsvAction(ActionEvent actionEvent) {
- Repository.printToCsv("Contacts.csv",repository.getItems());
- }
- public void onContactClick(MouseEvent mouseEvent) {
- Runner item = tableView.getSelectionModel().getSelectedItem();
- if(item != null)setContactToEditFields(item);
- }
- }
- pkg: MODEL
- //REPOSITORY
- package model;
- import java.io.IOException;
- import java.nio.charset.StandardCharsets;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.stream.Collectors;
- public final class Repository {
- private static Repository instance = new Repository();
- private List<Runner> runners;
- public static Repository getInstance() {
- if (instance == null){
- instance = new Repository();
- }
- return instance;
- }
- private Repository() {
- runners = new LinkedList<>();
- /*runners.add(new Runner("Huber Susi", "0660 123 4567","4020 Linz, Straße 3"));
- runners.add(new Runner("Meier Thomas","0565 987 6543","4030 Linz, Straße 5"));
- runners.add(new Runner("Meier Hans","0565 987 6543","4030 Linz, Straße 5"));
- runners.add(new Runner("Müller Herbert","0565 987 6543","4030 Linz, Straße 5"));*/
- runners.addAll(Arrays.asList(readFromCsv("Contacts.csv")));
- }
- public void add(Runner runner){
- runners.add(runner);
- }
- public void remove(Runner runner){
- runners.remove(runner);
- }
- public void update(Runner runner){
- for (int i = 0; i < runners.size(); i++) {
- if(runners.get(i).getId() == runner.getId()){
- runners.get(i).setName(runner.getName());
- runners.get(i).setPhonenumber(runner.getPhonenumber());
- runners.get(i).setAddresse(runner.getAddresse());
- break;
- }
- }
- }
- public Runner[] getItems(){
- return runners.toArray(new Runner[runners.size()]);
- }
- public static void printToCsv(String path, Runner[] runners){
- List<String> lines = new ArrayList<>();
- try {
- for (Runner runner : runners) {
- lines.add(String.format("%s;%s;%s", runner.getName(), runner.getPhonenumber(), runner.getAddresse()));
- }
- Files.write(Paths.get(path),lines, StandardCharsets.UTF_16);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static Runner[] readFromCsv(String path){
- try {
- if(!Files.exists(Paths.get(path))) return null;
- return Files.lines(Paths.get(path),StandardCharsets.UTF_16).map((String s) -> { String[] line = s.split(";"); return new Runner(line[0],line[1],line[2]);}).collect(Collectors.toList()).toArray(new Runner[0]);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
- }
- pkg:MODEL
- //RUNNER
- package model;
- public class Runner {
- private static int counter = 0;
- private int id;
- private String name;
- private String phonenumber;
- private String addresse;
- public Runner(String name, String phonenumber, String addresse) {
- this.id = ++counter;
- this.name = name;
- this.phonenumber = phonenumber;
- this.addresse = addresse;
- }
- public int getId() {
- return id;
- }
- public static int getIndex() {
- return counter;
- }
- public String getName() {
- return name;
- }
- public String getPhonenumber() {
- return phonenumber;
- }
- public String getAddresse() {
- return addresse;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setPhonenumber(String phonenumber) {
- this.phonenumber = phonenumber;
- }
- public void setAddresse(String addresse) {
- this.addresse = addresse;
- }
- @Override
- public String toString() {
- return getName();
- }
- }
- pkg:runner
- //MAIN
- package runner;
- import javafx.application.Application;
- import javafx.fxml.FXMLLoader;
- import javafx.scene.Parent;
- import javafx.scene.Scene;
- import javafx.stage.Stage;
- public class Main extends Application {
- @Override
- public void start(Stage primaryStage) throws Exception{
- Parent root = FXMLLoader.load(getClass().getResource("../view/RunnerView.fxml"));
- primaryStage.setTitle("Addressbook");
- primaryStage.setScene(new Scene(root, 900, 400));
- primaryStage.show();
- }
- public static void main(String[] args) {
- launch(args);
- }
- }
- pkg:view
- //RunnerVIEW
- <?xml version="1.0" encoding="UTF-8"?>
- <?import java.lang.*?>
- <?import javafx.geometry.*?>
- <?import javafx.scene.control.*?>
- <?import javafx.scene.layout.*?>
- <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="753.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.RunnerController">
- <top>
- <FlowPane BorderPane.alignment="CENTER">
- <children>
- <TextField fx:id="tfSearch">
- <FlowPane.margin>
- <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </TextField>
- <Button fx:id="btnSearch" mnemonicParsing="false" onAction="#onSearchAction" text="Suchen">
- <FlowPane.margin>
- <Insets bottom="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- <Button fx:id="btntoCsv" mnemonicParsing="false" onAction="#onToCsvAction" text="Zu Csv" />
- </children>
- </FlowPane>
- </top>
- <right>
- <GridPane prefHeight="355.0" prefWidth="299.0" BorderPane.alignment="CENTER">
- <columnConstraints>
- <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
- <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
- </columnConstraints>
- <rowConstraints>
- <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
- <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
- <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
- <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
- </rowConstraints>
- <children>
- <Label text="Id:">
- <GridPane.margin>
- <Insets />
- </GridPane.margin>
- </Label>
- <Label text="Name:" GridPane.rowIndex="1" />
- <Label text="Telefonnummer:" GridPane.rowIndex="2" />
- <Label text="Addresse:" GridPane.rowIndex="3" />
- <TextField fx:id="tfId" disable="true" GridPane.columnIndex="1">
- <GridPane.margin>
- <Insets />
- </GridPane.margin>
- </TextField>
- <TextField fx:id="tfName" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="1" />
- <TextField fx:id="tfPhonenumber" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="2" />
- <TextField fx:id="tfAddresse" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="3" />
- </children>
- <BorderPane.margin>
- <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
- </BorderPane.margin>
- </GridPane>
- </right>
- <bottom>
- <FlowPane BorderPane.alignment="CENTER">
- <children>
- <Button fx:id="btnEdit" mnemonicParsing="false" onAction="#onEditAction" text="Edit">
- <FlowPane.margin>
- <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- <Button fx:id="btnNew" mnemonicParsing="false" onAction="#onNewAction" text="Neu">
- <FlowPane.margin>
- <Insets bottom="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- <Button fx:id="btnDelete" mnemonicParsing="false" onAction="#onDeleteAction" text="Löschen">
- <FlowPane.margin>
- <Insets bottom="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- <Button fx:id="btnSave" mnemonicParsing="false" onAction="#onSaveAction" text="Speichern">
- <FlowPane.margin>
- <Insets bottom="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- <Button fx:id="btnCancel" mnemonicParsing="false" onAction="#onCancelAction" text="Abbrechen">
- <FlowPane.margin>
- <Insets bottom="10.0" right="10.0" top="10.0" />
- </FlowPane.margin>
- </Button>
- </children>
- </FlowPane>
- </bottom>
- <center>
- <TableView fx:id="tableView" onMouseClicked="#onContactClick" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
- </center>
- </BorderPane>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement