Advertisement
Guest User

JV

a guest
Apr 25th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.71 KB | None | 0 0
  1. //ARMIN HAMZIC
  2.  
  3. pkg: CONTROLLER
  4.  
  5. //RUNNERCONTROLLER
  6. package controller;
  7.  
  8. import javafx.collections.FXCollections;
  9. import javafx.collections.ObservableList;
  10. import model.Repository;
  11. import javafx.event.ActionEvent;
  12. import javafx.fxml.FXML;
  13. import javafx.fxml.Initializable;
  14. import javafx.scene.control.*;
  15. import javafx.scene.control.cell.PropertyValueFactory;
  16. import javafx.scene.input.MouseEvent;
  17. import model.Runner;
  18.  
  19. import java.net.URL;
  20. import java.util.*;
  21.  
  22. public class RunnerController implements Initializable {
  23.  
  24. @FXML
  25. private Button btntoCsv;
  26. @FXML
  27. private TableView<Runner> tableView;
  28. @FXML
  29. private ListView<Runner> listView;
  30. @FXML
  31. private Button btnEdit;
  32. @FXML
  33. private Button btnNew;
  34. @FXML
  35. private Button btnDelete;
  36. @FXML
  37. private Button btnSave;
  38. @FXML
  39. private Button btnCancel;
  40. @FXML
  41. private TextField tfName;
  42. @FXML
  43. private TextField tfPhonenumber;
  44. @FXML
  45. private TextField tfAddresse;
  46. @FXML
  47. private TextField tfSearch;
  48. @FXML
  49. private Button btnSearch;
  50. @FXML
  51. private TextField tfId;
  52.  
  53. @FXML
  54. private void onCancelAction(ActionEvent actionEvent) {
  55. newContact = false;
  56. setEditFiedlsDisable(true);
  57. if(tableView.getSelectionModel().getSelectedItem() == null)clearEditFields();
  58. }
  59. @FXML
  60. private void onSaveAction(ActionEvent actionEvent) {
  61. Runner item;
  62. if(newContact && !tfName.getText().equals("")){
  63. item = new Runner(tfName.getText(),tfPhonenumber.getText(),tfAddresse.getText());
  64. repository.add(item);
  65. olRunners.clear();
  66. olRunners.addAll(repository.getItems());
  67. tfSearch.setText("");
  68. clearEditFields();
  69. }
  70. else {
  71. item = tableView.getSelectionModel().getSelectedItem();
  72. saveContactFromEditFields(item);
  73. }
  74.  
  75. setEditFiedlsDisable(true);
  76. tableView.refresh();
  77. newContact = false;
  78.  
  79. }
  80. @FXML
  81. private void onDeleteAction(ActionEvent actionEvent) {
  82. Runner item = tableView.getSelectionModel().getSelectedItem();
  83. repository.remove(item);
  84. olRunners.clear();
  85. olRunners.addAll(repository.getItems());
  86. }
  87. @FXML
  88. private void onNewAction(ActionEvent actionEvent) {
  89. tableView.getSelectionModel().select(null);
  90. newContact = true;
  91. setEditFiedlsDisable(false);
  92. clearEditFields();
  93.  
  94. tfId.setText(Integer.toString(Runner.getIndex()+1));
  95. }
  96. @FXML
  97. private void onEditAction(ActionEvent actionEvent) {
  98. newContact = false;
  99. if(tableView.getSelectionModel().getSelectedItem() != null) setEditFiedlsDisable(false);
  100. }
  101. @FXML
  102. private void onContextsClicked(MouseEvent mouseEvent) {
  103. Runner item = tableView.getSelectionModel().getSelectedItem();
  104.  
  105. if(item != null)setContactToEditFields(item);
  106.  
  107. }
  108. @FXML
  109. private void onSearchAction(ActionEvent actionEvent) {
  110. olRunners.clear();
  111. olRunners.addAll(repository.getItems());
  112. String text = tfSearch.getText();
  113. for (int i = 0; i < olRunners.size(); i++) {
  114. if(!olRunners.get(i).getName().toLowerCase().contains(text.toLowerCase())){
  115. olRunners.remove(olRunners.get(i));
  116. i--;
  117. }
  118. }
  119. }
  120.  
  121. private Repository repository = Repository.getInstance();
  122. private ObservableList<Runner> olRunners;
  123. private boolean newContact = false;
  124. @Override
  125. public void initialize(URL location, ResourceBundle resources) {
  126. Runner[] runners = repository.getItems();
  127. LinkedList<Runner> runnerList = new LinkedList<>();
  128. Collections.addAll(runnerList, runners);
  129. olRunners = FXCollections.observableList(runnerList);
  130.  
  131. TableColumn<Runner,Integer> idcol = new TableColumn<>("ID");
  132. TableColumn<Runner,String> namecol= new TableColumn<>("Name");
  133. TableColumn<Runner,String> telcol= new TableColumn<>("Phone Number");
  134. TableColumn<Runner,String> addrescol= new TableColumn<>("Addresse");
  135.  
  136. idcol.setCellValueFactory(new PropertyValueFactory<>("id"));
  137. namecol.setCellValueFactory(new PropertyValueFactory<>("name"));
  138. telcol.setCellValueFactory(new PropertyValueFactory<>("phonenumber"));
  139. addrescol.setCellValueFactory(new PropertyValueFactory<>("addresse"));
  140.  
  141. tableView.setItems(olRunners);
  142. tableView.getColumns().addAll(idcol,namecol,telcol,addrescol);
  143. }
  144. private void setEditFiedlsDisable(boolean value){
  145. tfName.setDisable(value);
  146. tfPhonenumber.setDisable(value);
  147. tfAddresse.setDisable(value);
  148. }
  149. private void clearEditFields(){
  150. tfId.setText("");
  151. tfName.setText("");
  152. tfPhonenumber.setText("");
  153. tfAddresse.setText("");
  154. }
  155. private void setContactToEditFields(Runner runner){
  156. tfId.setText(Integer.toString(runner.getId()));
  157. tfName.setText(runner.getName());
  158. tfPhonenumber.setText(runner.getPhonenumber());
  159. tfAddresse.setText(runner.getAddresse());
  160. }
  161. private void saveContactFromEditFields(Runner runner){
  162. if(runner != null && !tfName.getText().equals("")){
  163. runner.setName(tfName.getText());
  164. runner.setPhonenumber(tfPhonenumber.getText());
  165. runner.setAddresse(tfAddresse.getText());
  166. repository.update(runner);
  167. }
  168. }
  169.  
  170. public void onToCsvAction(ActionEvent actionEvent) {
  171. Repository.printToCsv("Contacts.csv",repository.getItems());
  172. }
  173.  
  174. public void onContactClick(MouseEvent mouseEvent) {
  175. Runner item = tableView.getSelectionModel().getSelectedItem();
  176.  
  177. if(item != null)setContactToEditFields(item);
  178. }
  179. }
  180.  
  181.  
  182.  
  183.  
  184. pkg: MODEL
  185. //REPOSITORY
  186. package model;
  187.  
  188. import java.io.IOException;
  189. import java.nio.charset.StandardCharsets;
  190. import java.nio.file.Files;
  191. import java.nio.file.Paths;
  192. import java.util.ArrayList;
  193. import java.util.Arrays;
  194. import java.util.LinkedList;
  195. import java.util.List;
  196. import java.util.stream.Collectors;
  197.  
  198. public final class Repository {
  199. private static Repository instance = new Repository();
  200. private List<Runner> runners;
  201.  
  202. public static Repository getInstance() {
  203. if (instance == null){
  204. instance = new Repository();
  205. }
  206. return instance;
  207. }
  208.  
  209. private Repository() {
  210. runners = new LinkedList<>();
  211. /*runners.add(new Runner("Huber Susi", "0660 123 4567","4020 Linz, Straße 3"));
  212. runners.add(new Runner("Meier Thomas","0565 987 6543","4030 Linz, Straße 5"));
  213. runners.add(new Runner("Meier Hans","0565 987 6543","4030 Linz, Straße 5"));
  214. runners.add(new Runner("Müller Herbert","0565 987 6543","4030 Linz, Straße 5"));*/
  215. runners.addAll(Arrays.asList(readFromCsv("Contacts.csv")));
  216. }
  217.  
  218. public void add(Runner runner){
  219. runners.add(runner);
  220. }
  221. public void remove(Runner runner){
  222. runners.remove(runner);
  223. }
  224. public void update(Runner runner){
  225. for (int i = 0; i < runners.size(); i++) {
  226. if(runners.get(i).getId() == runner.getId()){
  227. runners.get(i).setName(runner.getName());
  228. runners.get(i).setPhonenumber(runner.getPhonenumber());
  229. runners.get(i).setAddresse(runner.getAddresse());
  230. break;
  231. }
  232. }
  233. }
  234. public Runner[] getItems(){
  235. return runners.toArray(new Runner[runners.size()]);
  236. }
  237.  
  238. public static void printToCsv(String path, Runner[] runners){
  239. List<String> lines = new ArrayList<>();
  240. try {
  241. for (Runner runner : runners) {
  242. lines.add(String.format("%s;%s;%s", runner.getName(), runner.getPhonenumber(), runner.getAddresse()));
  243. }
  244. Files.write(Paths.get(path),lines, StandardCharsets.UTF_16);
  245. } catch (IOException e) {
  246. e.printStackTrace();
  247. }
  248. }
  249. public static Runner[] readFromCsv(String path){
  250. try {
  251. if(!Files.exists(Paths.get(path))) return null;
  252. 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]);
  253. } catch (IOException e) {
  254. e.printStackTrace();
  255. return null;
  256. }
  257. }
  258. }
  259.  
  260.  
  261.  
  262.  
  263.  
  264. pkg:MODEL
  265. //RUNNER
  266. package model;
  267.  
  268. public class Runner {
  269. private static int counter = 0;
  270. private int id;
  271. private String name;
  272. private String phonenumber;
  273. private String addresse;
  274.  
  275. public Runner(String name, String phonenumber, String addresse) {
  276. this.id = ++counter;
  277. this.name = name;
  278. this.phonenumber = phonenumber;
  279. this.addresse = addresse;
  280. }
  281.  
  282. public int getId() {
  283. return id;
  284. }
  285. public static int getIndex() {
  286. return counter;
  287. }
  288.  
  289. public String getName() {
  290. return name;
  291. }
  292.  
  293. public String getPhonenumber() {
  294. return phonenumber;
  295. }
  296.  
  297. public String getAddresse() {
  298. return addresse;
  299. }
  300.  
  301. public void setName(String name) {
  302. this.name = name;
  303. }
  304.  
  305. public void setPhonenumber(String phonenumber) {
  306. this.phonenumber = phonenumber;
  307. }
  308.  
  309. public void setAddresse(String addresse) {
  310. this.addresse = addresse;
  311. }
  312.  
  313. @Override
  314. public String toString() {
  315. return getName();
  316. }
  317. }
  318.  
  319.  
  320.  
  321. pkg:runner
  322. //MAIN
  323. package runner;
  324.  
  325. import javafx.application.Application;
  326. import javafx.fxml.FXMLLoader;
  327. import javafx.scene.Parent;
  328. import javafx.scene.Scene;
  329. import javafx.stage.Stage;
  330.  
  331. public class Main extends Application {
  332.  
  333. @Override
  334. public void start(Stage primaryStage) throws Exception{
  335. Parent root = FXMLLoader.load(getClass().getResource("../view/RunnerView.fxml"));
  336. primaryStage.setTitle("Addressbook");
  337. primaryStage.setScene(new Scene(root, 900, 400));
  338. primaryStage.show();
  339. }
  340. public static void main(String[] args) {
  341. launch(args);
  342. }
  343. }
  344.  
  345.  
  346.  
  347.  
  348. pkg:view
  349. //RunnerVIEW
  350. <?xml version="1.0" encoding="UTF-8"?>
  351.  
  352. <?import java.lang.*?>
  353. <?import javafx.geometry.*?>
  354. <?import javafx.scene.control.*?>
  355. <?import javafx.scene.layout.*?>
  356.  
  357. <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">
  358. <top>
  359. <FlowPane BorderPane.alignment="CENTER">
  360. <children>
  361. <TextField fx:id="tfSearch">
  362. <FlowPane.margin>
  363. <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
  364. </FlowPane.margin>
  365. </TextField>
  366. <Button fx:id="btnSearch" mnemonicParsing="false" onAction="#onSearchAction" text="Suchen">
  367. <FlowPane.margin>
  368. <Insets bottom="10.0" right="10.0" top="10.0" />
  369. </FlowPane.margin>
  370. </Button>
  371. <Button fx:id="btntoCsv" mnemonicParsing="false" onAction="#onToCsvAction" text="Zu Csv" />
  372. </children>
  373. </FlowPane>
  374. </top>
  375. <right>
  376. <GridPane prefHeight="355.0" prefWidth="299.0" BorderPane.alignment="CENTER">
  377. <columnConstraints>
  378. <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  379. <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  380. </columnConstraints>
  381. <rowConstraints>
  382. <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  383. <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  384. <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  385. <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  386. </rowConstraints>
  387. <children>
  388. <Label text="Id:">
  389. <GridPane.margin>
  390. <Insets />
  391. </GridPane.margin>
  392. </Label>
  393. <Label text="Name:" GridPane.rowIndex="1" />
  394. <Label text="Telefonnummer:" GridPane.rowIndex="2" />
  395. <Label text="Addresse:" GridPane.rowIndex="3" />
  396. <TextField fx:id="tfId" disable="true" GridPane.columnIndex="1">
  397. <GridPane.margin>
  398. <Insets />
  399. </GridPane.margin>
  400. </TextField>
  401. <TextField fx:id="tfName" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="1" />
  402. <TextField fx:id="tfPhonenumber" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="2" />
  403. <TextField fx:id="tfAddresse" disable="true" GridPane.columnIndex="1" GridPane.rowIndex="3" />
  404. </children>
  405. <BorderPane.margin>
  406. <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
  407. </BorderPane.margin>
  408. </GridPane>
  409. </right>
  410. <bottom>
  411. <FlowPane BorderPane.alignment="CENTER">
  412. <children>
  413. <Button fx:id="btnEdit" mnemonicParsing="false" onAction="#onEditAction" text="Edit">
  414. <FlowPane.margin>
  415. <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
  416. </FlowPane.margin>
  417. </Button>
  418. <Button fx:id="btnNew" mnemonicParsing="false" onAction="#onNewAction" text="Neu">
  419. <FlowPane.margin>
  420. <Insets bottom="10.0" right="10.0" top="10.0" />
  421. </FlowPane.margin>
  422. </Button>
  423. <Button fx:id="btnDelete" mnemonicParsing="false" onAction="#onDeleteAction" text="Löschen">
  424. <FlowPane.margin>
  425. <Insets bottom="10.0" right="10.0" top="10.0" />
  426. </FlowPane.margin>
  427. </Button>
  428. <Button fx:id="btnSave" mnemonicParsing="false" onAction="#onSaveAction" text="Speichern">
  429. <FlowPane.margin>
  430. <Insets bottom="10.0" right="10.0" top="10.0" />
  431. </FlowPane.margin>
  432. </Button>
  433. <Button fx:id="btnCancel" mnemonicParsing="false" onAction="#onCancelAction" text="Abbrechen">
  434. <FlowPane.margin>
  435. <Insets bottom="10.0" right="10.0" top="10.0" />
  436. </FlowPane.margin>
  437. </Button>
  438. </children>
  439. </FlowPane>
  440. </bottom>
  441. <center>
  442. <TableView fx:id="tableView" onMouseClicked="#onContactClick" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
  443. </center>
  444. </BorderPane>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement