Skip to content
This repository was archived by the owner on Nov 4, 2022. It is now read-only.

Commit bccc092

Browse files
committed
Implement the exit behavior, and improve the code ↖️🤓🤓🤓🤓
1 parent 854715e commit bccc092

File tree

6 files changed

+121
-19
lines changed

6 files changed

+121
-19
lines changed

.idea/workspace.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/com/anas/jsimpletexteditor/MainFrame.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.anas.jsimpletexteditor.files.FileType;
44
import com.anas.jsimpletexteditor.files.TextFile;
5+
import com.anas.jsimpletexteditor.listners.MainFrameListener;
56
import com.anas.jsimpletexteditor.settings.*;
67
import net.miginfocom.swing.MigLayout;
78

@@ -21,12 +22,13 @@ public MainFrame() {
2122
super("Simple Text Editor");
2223
init();
2324
addMenuBar();
24-
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
25+
super.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
2526
super.setLayout(new MigLayout());
2627
super.setSize(new Dimension(800, 600));
2728
this.addComponents(); // add components to the frame
2829
this.setUpSettings((UISettings) SettingsManager.getInstance().getUiSettings());
2930
super.setLocationRelativeTo(null);
31+
super.addWindowListener(new MainFrameListener(this));
3032
super.setVisible(true);
3133
SettingsManager.getInstance().addSettingsListener(this);
3234
}
@@ -73,15 +75,8 @@ private void addActions(JMenuItem[] fileMenuItems) {
7375
});
7476

7577
fileMenuItems[1].addActionListener(event -> {
76-
String path = null;
77-
if (!tabbedPane.getCurrentTab().getTextEditorPane().getTextFile().exists()) {
78-
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
79-
path = fileChooser.getSelectedFile().getPath();
80-
}
81-
} else {
82-
path = tabbedPane.getCurrentTab().getTextEditorPane().getTextFile().getPath();
83-
}
84-
tabbedPane.getCurrentTab().save(path);
78+
if (tabbedPane.getCurrentTab() != null)
79+
tabbedPane.getCurrentTab().save();
8580
});
8681

8782
fileMenuItems[2].addActionListener(event -> {
@@ -94,11 +89,22 @@ private void addActions(JMenuItem[] fileMenuItems) {
9489
}
9590
});
9691

97-
fileMenuItems[3].addActionListener(event -> {
98-
tabbedPane.remove(tabbedPane.getCurrentTab());
99-
});
92+
fileMenuItems[3].addActionListener(event -> tabbedPane.remove(tabbedPane.getCurrentTab()));
10093

10194
fileMenuItems[4].addActionListener(event -> new SettingsFrame());
95+
96+
fileMenuItems[5].addActionListener(event -> this.exit());
97+
}
98+
99+
public void exit() {
100+
if (tabbedPane.anyTabHasChanged()) {
101+
if (JOptionPane.showConfirmDialog(this,
102+
"You have unsaved changes. Are you sure you want to exit?",
103+
"Exit", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
104+
return;
105+
}
106+
}
107+
System.exit(0);
102108
}
103109

104110
@Override

src/main/java/com/anas/jsimpletexteditor/TabbedPane.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,17 @@ public Tab getCurrentTab() {
4040

4141
@Override
4242
public void remove(Component component) {
43-
if (((Tab)component).hasChange()) {
44-
int response = JOptionPane.showConfirmDialog(null, "The file has a changes you are shore close before save?",
45-
"You are shore", JOptionPane.YES_NO_OPTION);
43+
if (((Tab) component).exit()) {
44+
super.remove(component);
45+
}
46+
}
4647

47-
if (response == JOptionPane.YES_OPTION) {
48-
super.remove(component);
48+
public boolean anyTabHasChanged() {
49+
for (int i = 0; i < super.getTabCount() - 1; i++) {
50+
if (((Tab) super.getComponentAt(i)).hasChange()) {
51+
return true;
4952
}
5053
}
54+
return false;
5155
}
5256
}

src/main/java/com/anas/jsimpletexteditor/files/TextFile.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
public class TextFile extends File {
77
private FileType fileType;
8+
private String path;
89
public TextFile(String pathname) {
910
super(pathname);
11+
this.setPath(super.getPath());
1012
fileType = FileType.getFileType(new File(pathname));
1113
}
1214

@@ -36,7 +38,9 @@ private String readFile() {
3638
while ((line = bufferedReader.readLine()) != null) {
3739
stringBuilder.append(line).append('\n');
3840
}
39-
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("\n")); // Delete last new line
41+
if (stringBuilder.length() > 0) {
42+
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("\n")); // Delete last new line
43+
}
4044
} catch (IOException e) {
4145
e.printStackTrace();
4246
}
@@ -54,4 +58,13 @@ public boolean save(String path, String newContent) {
5458
}
5559
return false;
5660
}
61+
62+
public void setPath(String path) {
63+
this.path = path;
64+
}
65+
66+
@Override
67+
public String getPath() {
68+
return this.path;
69+
}
5770
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.anas.jsimpletexteditor.listners;
2+
3+
import com.anas.jsimpletexteditor.MainFrame;
4+
5+
import java.awt.event.WindowEvent;
6+
import java.awt.event.WindowListener;
7+
8+
public class MainFrameListener implements WindowListener {
9+
private MainFrame mainFrame;
10+
11+
public MainFrameListener(MainFrame mainFrame) {
12+
this.mainFrame = mainFrame;
13+
}
14+
15+
@Override
16+
public void windowOpened(WindowEvent windowEvent) {
17+
18+
}
19+
20+
@Override
21+
public void windowClosing(WindowEvent windowEvent) {
22+
mainFrame.exit();
23+
}
24+
25+
@Override
26+
public void windowClosed(WindowEvent windowEvent) {
27+
28+
}
29+
30+
@Override
31+
public void windowIconified(WindowEvent windowEvent) {
32+
33+
}
34+
35+
@Override
36+
public void windowDeiconified(WindowEvent windowEvent) {
37+
38+
}
39+
40+
@Override
41+
public void windowActivated(WindowEvent windowEvent) {
42+
43+
}
44+
45+
@Override
46+
public void windowDeactivated(WindowEvent windowEvent) {
47+
48+
}
49+
}

src/main/java/com/anas/jsimpletexteditor/tab/Tab.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,29 @@ public boolean hasChange() {
6262
return true;
6363
return tabHead.hasChange();
6464
}
65+
66+
public boolean exit() {
67+
if (hasChange()) {
68+
int result = JOptionPane.showConfirmDialog(this, "Do you want to save changes?", "Save", JOptionPane.YES_NO_CANCEL_OPTION);
69+
if (result == JOptionPane.YES_OPTION) {
70+
return save();
71+
}
72+
}
73+
return true;
74+
}
75+
76+
public boolean save() {
77+
if (!textFile.exists()) {
78+
JFileChooser fileChooser = new JFileChooser();
79+
fileChooser.setDialogTitle("Save location");
80+
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
81+
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
82+
textFile.setPath(fileChooser.getSelectedFile().getAbsolutePath());
83+
} else {
84+
return false;
85+
}
86+
}
87+
save(textFile.getPath());
88+
return true;
89+
}
6590
}

0 commit comments

Comments
 (0)