Skip to content

Commit 7d6b6c9

Browse files
10th lesson - adding new tracks
1 parent 5c587a1 commit 7d6b6c9

File tree

12 files changed

+137
-102
lines changed

12 files changed

+137
-102
lines changed

10 - Adding tracks/data/tracks.txt

196 Bytes
Binary file not shown.

10 - Adding tracks/src/controller/tracks/AddController.java

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import model.AppendingObjectOutputStream;
1010
import model.Track;
1111

12+
import java.io.FileNotFoundException;
1213
import java.io.FileOutputStream;
1314
import java.io.IOException;
1415
import java.io.ObjectOutputStream;
@@ -39,25 +40,38 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
3940

4041
save.setOnAction(e -> {
4142
try {
42-
saveTrack();
43+
addTrack();
44+
} catch (IOException ex) {
45+
ex.printStackTrace();
46+
}
47+
});
48+
49+
cancel.setOnAction(e -> closeDialog());
50+
51+
/*
52+
save.setOnAction(e -> {
53+
try {
54+
// saveTrack();
4355
} catch (IOException ex) {
4456
ex.printStackTrace();
4557
}
4658
});
4759
4860
cancel.setOnAction(e -> handleCancel());
61+
*/
4962
}
5063

51-
private void saveTrack () throws IOException {
52-
// TODO: Validate data
64+
@FXML
65+
private void addTrack() throws IOException {
5366
Track track = new Track(title.getText(), artist.getText());
67+
String dataURL = rootURL + "/data/tracks.txt";
5468

55-
if (fileExists(rootURL + "/data/tracks.txt")) {
56-
AppendingObjectOutputStream aos = new AppendingObjectOutputStream(new FileOutputStream("data/tracks.txt", true));
57-
aos.writeObject(track);
58-
aos.close();
69+
if (fileExists(dataURL)) {
70+
AppendingObjectOutputStream as = new AppendingObjectOutputStream(new FileOutputStream(dataURL, true));
71+
as.writeObject(track);
72+
as.close();
5973
} else {
60-
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("data/tracks.txt"));
74+
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(dataURL));
6175
os.writeObject(track);
6276
os.close();
6377
}
@@ -70,8 +84,8 @@ private void saveTrack () throws IOException {
7084
* Called when clear button is clicked.
7185
*/
7286
@FXML
73-
private void handleCancel() {
74-
dialog.close();
87+
private void closeDialog() {
88+
this.dialog.close();
7589
}
7690

7791
public void setDialogStage(Stage dialog) {

10 - Adding tracks/src/controller/tracks/TracksController.java

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
import javafx.scene.layout.GridPane;
1414
import javafx.stage.Modality;
1515
import javafx.stage.Stage;
16+
import model.ErrorDialog;
1617
import model.Track;
1718

18-
import java.io.EOFException;
19-
import java.io.FileInputStream;
20-
import java.io.IOException;
21-
import java.io.ObjectInputStream;
19+
import java.io.*;
2220
import java.net.MalformedURLException;
2321
import java.net.URL;
2422
import java.util.ResourceBundle;
@@ -54,6 +52,11 @@ public class TracksController extends BaseController
5452

5553
private ObservableList<Track> tracksList;
5654
private Track track;
55+
ErrorDialog errorDialog;
56+
57+
public TracksController() {
58+
errorDialog = new ErrorDialog();
59+
}
5760

5861
@Override
5962
public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -71,7 +74,13 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
7174
tracksList.add(new Track("Aj tak sme frajeri", "Peter Nagy, Indigo"));
7275
*/
7376

74-
syncTracks();
77+
try {
78+
syncTracks();
79+
} catch (IOException e) {
80+
e.printStackTrace();
81+
} catch (ClassNotFoundException e) {
82+
e.printStackTrace();
83+
}
7584

7685
if (tracksList != null) {
7786
tracksTable.setItems(tracksList);
@@ -101,46 +110,72 @@ private void showDetails(Track track) {
101110
}
102111

103112
private void registerListeners () {
104-
addTrack.defaultButtonProperty().bind(addTrack.focusedProperty());
105-
addTrack.setOnAction((e) -> showAdd());
106-
107113
dashboard.defaultButtonProperty().bind(dashboard.focusedProperty());
108114
dashboard.setOnAction((e) -> switchScene("dashboard"));
109115

110116
logout.defaultButtonProperty().bind(logout.focusedProperty());
111117
logout.setOnAction((e) -> logout());
112118

119+
addTrack.defaultButtonProperty().bind(addTrack.focusedProperty());
120+
addTrack.setOnAction(e -> {
121+
try {
122+
showAddDialog();
123+
} catch (IOException ex) {
124+
errorDialog.display("Chyba s oknami", "Nepodarilo sa otvorit nove okno");
125+
}
126+
});
127+
113128
refreshBtn.defaultButtonProperty().bind(refreshBtn.focusedProperty());
114-
refreshBtn.setOnAction((e) -> syncTracks());
129+
refreshBtn.setOnAction(e -> {
130+
try {
131+
syncTracks();
132+
} catch (IOException ex) {
133+
ex.printStackTrace();
134+
} catch (ClassNotFoundException ex) {
135+
ex.printStackTrace();
136+
}
137+
});
115138
}
116139

117-
/**
118-
* Shows add dialog using fxml file
119-
*/
120-
public void showAdd() {
140+
private void showAddDialog() throws IOException {
141+
// System.out.println("Zobrazi sa Add Track Dialog okno");
121142
FXMLLoader loader = new FXMLLoader();
122143

123-
try {
124-
loader.setLocation(getLocation("tracks/add"));
144+
loader.setLocation(getLocation("tracks/add"));
145+
GridPane pane = loader.load();
146+
Stage addDialog = new Stage();
147+
Scene scene = new Scene(pane);
125148

126-
GridPane pane = loader.load();
127-
Scene scene = new Scene(pane);
128-
Stage addDialog = new Stage();
149+
AddController controller = loader.getController();
150+
controller.setDialogStage(addDialog);
129151

130-
addDialog.setTitle("Pridať skladbu");
131-
// addDialog.initOwner((Stage) trackTitle.getScene().getWindow());
152+
addDialog.setTitle("Pridať skladbu");
153+
addDialog.setScene(scene);
154+
addDialog.showAndWait();
155+
}
132156

133-
AddController controller = loader.getController();
134-
controller.setDialogStage(addDialog);
157+
private void syncTracks () throws IOException, ClassNotFoundException {
158+
String dataURL = rootURL + "/data/tracks.txt";
135159

136-
addDialog.setScene(scene);
137-
addDialog.showAndWait();
138-
} catch (IOException e) {
139-
e.printStackTrace();
160+
if (fileExists(dataURL)) {
161+
ObjectInputStream is = new ObjectInputStream(new FileInputStream(dataURL));
162+
163+
tracksTable.getItems().removeAll(tracksList);
164+
165+
try {
166+
while (true) {
167+
Track track = (Track) is.readObject();
168+
System.out.println(track.getTitle() + ", " + track.getArtist());
169+
tracksList.add(track);
170+
}
171+
} catch (EOFException e) {
172+
System.out.println("Koniec suboru");
173+
}
174+
175+
tracksTable.setItems(tracksList);
140176
}
141-
}
142177

143-
private void syncTracks () {
178+
/*
144179
String fileURL = rootURL + "/data/tracks.txt";
145180
146181
if (fileExists(fileURL)) {
@@ -163,5 +198,6 @@ private void syncTracks () {
163198
164199
tracksTable.setItems(tracksList);
165200
}
201+
*/
166202
}
167203
}

10 - Adding tracks/src/view/tracks/add.fxml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414

1515
<Label id="banner" alignment="CENTER" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="3"/>
1616

17-
<Label text="Názov" alignment="CENTER" GridPane.rowIndex="1" GridPane.columnIndex="1"/>
17+
<Label text="Názov" alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="1" />
1818
<TextField fx:id="title" GridPane.rowIndex="1" GridPane.columnIndex="2" GridPane.columnSpan="2"/>
1919

20-
<Label text="Interprét" alignment="CENTER" GridPane.rowIndex="5" GridPane.columnIndex="1"/>
20+
<Label text="Interprét" alignment="CENTER" GridPane.columnIndex="5" GridPane.rowIndex="1" />
2121
<TextField fx:id="artist" GridPane.rowIndex="5" GridPane.columnIndex="2" GridPane.columnSpan="2"/>
2222

23-
<Button fx:id="save" prefWidth="130" text="Uložiť" GridPane.rowIndex="8" GridPane.columnIndex="2"/>
24-
<Button fx:id="cancel" prefWidth="130" text="Zrušiť" GridPane.rowIndex="8" GridPane.columnIndex="3"/>
23+
<Button fx:id="save" prefWidth="130" text="Uložiž" GridPane.rowIndex="8" GridPane.columnIndex="2" />
24+
<Button fx:id="cancel" prefWidth="130" text="Zrušiť" GridPane.rowIndex="8" GridPane.columnIndex="3" />
2525

2626
</GridPane>

10 - Adding tracks/src/view/tracks/all.fxml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131

3232
<HBox spacing="10" alignment="bottom_left" GridPane.columnIndex="0"
3333
GridPane.rowIndex="2" GridPane.columnSpan="2" minHeight="50">
34-
<Button fx:id="addTrack" prefWidth="120" text="+"/>
35-
<Button fx:id="refreshBtn" prefWidth="120" text="Načítať"/>
34+
<Button fx:id="addTrack" prefWidth="120" text="Pridať skladbu" />
35+
<Button fx:id="refreshBtn" prefWidth="120" text="Načítať" />
3636
<Button fx:id="dashboard" prefWidth="120" text="Domov"/>
3737
<Button fx:id="logout" prefWidth="120" text="Odhlásiť sa"/>
3838
</HBox>

7 - TableView/src/controller/TracksController.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,15 @@
66
import javafx.scene.control.Button;
77
import javafx.scene.control.TableColumn;
88
import javafx.scene.control.TableView;
9-
import javafx.scene.layout.GridPane;
109
import model.Track;
1110

1211
import java.net.URL;
13-
import java.util.ArrayList;
1412
import java.util.ResourceBundle;
1513

1614
public class TracksController extends BaseController
1715
{
1816
@FXML
19-
private TableView<Track> tracksTable;
17+
private TableView tracksTable;
2018

2119
@FXML
2220
private TableColumn<Track, String> title;
@@ -30,29 +28,24 @@ public class TracksController extends BaseController
3028
@FXML
3129
private Button logout;
3230

33-
private ObservableList<Track> tracksList;
31+
ObservableList<Track> tracksList;
32+
33+
@Override
34+
public void initialize(URL url, ResourceBundle resourceBundle) {
35+
super.initialize(url, resourceBundle);
3436

35-
public TracksController () {
3637
tracksList = FXCollections.observableArrayList();
3738
tracksList.add(new Track("Tame Me Home, Country Roads", "John Denver"));
3839
tracksList.add(new Track("Iridescent", "Linkin Park"));
3940
tracksList.add(new Track("Three Little Birds", "Bob Marley & The Wailers"));
4041
tracksList.add(new Track("Aj tak sme frajeri", "Peter Nagy, Indigo"));
41-
}
42+
tracksList.add(new Track("Barbie girl", "Aqua"));
4243

43-
@Override
44-
public void initialize(URL url, ResourceBundle resourceBundle) {
45-
super.initialize(url, resourceBundle);
44+
tracksTable.setItems(tracksList);
4645

4746
title.setCellValueFactory(cellData -> cellData.getValue().getTitleProperty());
4847
artist.setCellValueFactory(cellData -> cellData.getValue().getArtistProperty());
4948

50-
if (tracksList != null) {
51-
tracksTable.setItems(tracksList);
52-
} else {
53-
tracksTable.managedProperty().bind(tracksTable.visibleProperty());
54-
}
55-
5649
registerListeners();
5750
}
5851

7 - TableView/src/model/Track.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import javafx.beans.property.SimpleStringProperty;
44
import javafx.beans.property.StringProperty;
55

6-
/***
7-
* Definujeme si najprv model Track
8-
*/
96
public class Track {
10-
// Attribúty nech sú typu String
117
private String title;
128
private String artist;
139

10+
public Track () {
11+
12+
}
13+
1414
public Track(String title, String artist) {
1515
this.title = title;
1616
this.artist = artist;
@@ -20,9 +20,7 @@ public String getTitle() {
2020
return title;
2121
}
2222

23-
// Do tabuľky vstupuje StringProperty
2423
public StringProperty getTitleProperty() {
25-
// StringProperty je abstraktná trieda, preto ju inicializujeme pomocou SimpleStringProperty - konkrétna trieda
2624
return new SimpleStringProperty(title);
2725
}
2826

@@ -34,14 +32,11 @@ public String getArtist() {
3432
return artist;
3533
}
3634

37-
// Do tabuľky vstupuje StringProperty
3835
public StringProperty getArtistProperty() {
39-
// StringProperty je abstraktná trieda, preto ju inicializujeme pomocou SimpleStringProperty - konkrétna trieda
4036
return new SimpleStringProperty(artist);
4137
}
4238

4339
public void setArtist(String artist) {
4440
this.artist = artist;
4541
}
46-
4742
}

7 - TableView/src/view/Tracks/All.fxml

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,11 @@
1515

1616
<TableView fx:id="tracksTable" GridPane.rowIndex="1" GridPane.columnIndex="1">
1717
<columns>
18-
<TableColumn fx:id="title" prefWidth="300" text="Názov"/>
19-
<TableColumn fx:id="artist" prefWidth="300" text="Interprét"/>
18+
<TableColumn fx:id="title" prefWidth="200" text="Názov skladby" />
19+
<TableColumn fx:id="artist" prefWidth="200" text="Interprét" />
2020
</columns>
2121
</TableView>
2222

23-
<!--
24-
<AnchorPane GridPane.rowIndex="1" GridPane.columnIndex="2">
25-
<GridPane vgap="10.0" hgap="10.0">
26-
<Label text="Odosielateľ - prijímateľ:" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
27-
<Label fx:id="lblReciever" GridPane.columnIndex="2" GridPane.rowIndex="1"/>
28-
29-
<Label text="Suma:" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
30-
<Label fx:id="lblSum" GridPane.columnIndex="2" GridPane.rowIndex="2"/>
31-
32-
<Label text="Dátum:" GridPane.columnIndex="1" GridPane.rowIndex="3"/>
33-
<Label fx:id="lblDate" GridPane.columnIndex="2" GridPane.rowIndex="3"/>
34-
35-
<Label text="Poznámka:" GridPane.columnIndex="1" GridPane.rowIndex="4"/>
36-
<Label fx:id="lblNote" GridPane.columnIndex="2" GridPane.rowIndex="4"/>
37-
</GridPane>
38-
</AnchorPane>
39-
-->
40-
4123
<HBox spacing="10" alignment="bottom_left" GridPane.columnIndex="0"
4224
GridPane.rowIndex="2" GridPane.columnSpan="2" minHeight="50">
4325
<Button fx:id="dashboard" prefWidth="120" text="Domov"/>

0 commit comments

Comments
 (0)