Skip to content

Add simple Java GUI apps #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions java-apps/CitiesApp/CitiesGUI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

public class CitiesGUI extends JFrame {
private List<City> cities;

public CitiesGUI() {
super("Cities Viewer");
cities = loadCities("../data/cities.txt");
setupUI();
}

private List<City> loadCities(String path) {
List<City> list = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(path), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split("#");
if (parts.length == 11) {
String ref = parts[0];
String nameGR = parts[1];
String gender = parts[8];
String nameEN = parts[9];
String state = parts[10];
list.add(new City(ref, nameGR, gender, nameEN, state));
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}

private void setupUI() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
String[] columns = {"Greek Name", "Gender", "English Name", "State"};
DefaultTableModel model = new DefaultTableModel(columns, 0);
for (City c : cities) {
model.addRow(new Object[]{c.getNameGR(), c.getGender(), c.getNameEN(), c.getState()});
}
JTable table = new JTable(model);
add(new JScrollPane(table), BorderLayout.CENTER);
setSize(600, 400);
setLocationRelativeTo(null);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new CitiesGUI().setVisible(true));
}
}
21 changes: 21 additions & 0 deletions java-apps/CitiesApp/City.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
public class City {
private String ref;
private String nameGR;
private String gender;
private String nameEN;
private String state;

public City(String ref, String nameGR, String gender, String nameEN, String state) {
this.ref = ref;
this.nameGR = nameGR;
this.gender = gender;
this.nameEN = nameEN;
this.state = state;
}

public String getRef() { return ref; }
public String getNameGR() { return nameGR; }
public String getGender() { return gender; }
public String getNameEN() { return nameEN; }
public String getState() { return state; }
}
56 changes: 56 additions & 0 deletions java-apps/NamedEntitiesApp/NamedEntitiesGUI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

public class NamedEntitiesGUI extends JFrame {
private List<NamedEntity> entities;

public NamedEntitiesGUI() {
super("Named Entities Viewer");
entities = loadEntities("../data/namedEntities.txt");
setupUI();
}

private List<NamedEntity> loadEntities(String path) {
List<NamedEntity> list = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(path), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split("#");
if (parts.length == 11) {
String ref = parts[0];
String nameGR = parts[1];
String gender = parts[8];
String nameEN = parts[9];
String type = parts[10];
list.add(new NamedEntity(ref, nameGR, gender, nameEN, type));
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}

private void setupUI() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
String[] columns = {"Greek Name", "Gender", "English Name", "Type"};
DefaultTableModel model = new DefaultTableModel(columns, 0);
for (NamedEntity e : entities) {
model.addRow(new Object[]{e.getNameGR(), e.getGender(), e.getNameEN(), e.getType()});
}
JTable table = new JTable(model);
add(new JScrollPane(table), BorderLayout.CENTER);
setSize(700, 400);
setLocationRelativeTo(null);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new NamedEntitiesGUI().setVisible(true));
}
}
21 changes: 21 additions & 0 deletions java-apps/NamedEntitiesApp/NamedEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
public class NamedEntity {
private String ref;
private String nameGR;
private String gender;
private String nameEN;
private String type;

public NamedEntity(String ref, String nameGR, String gender, String nameEN, String type) {
this.ref = ref;
this.nameGR = nameGR;
this.gender = gender;
this.nameEN = nameEN;
this.type = type;
}

public String getRef() { return ref; }
public String getNameGR() { return nameGR; }
public String getGender() { return gender; }
public String getNameEN() { return nameEN; }
public String getType() { return type; }
}
24 changes: 24 additions & 0 deletions java-apps/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Java GUI Applications

This folder contains two simple Swing applications used for the university course "Methodologies for Application Development".

- **CitiesApp** – Reads `data/cities.txt` and displays a table with Greek and English names of selected cities.
- **NamedEntitiesApp** – Reads `data/namedEntities.txt` and displays a table with different named entities such as museums or airports.

Data files are encoded in UTF-8 and follow the format described in the assignment specification.

To run an application use:

```bash
javac CitiesApp/*.java
java -cp CitiesApp CitiesGUI
```

or

```bash
javac NamedEntitiesApp/*.java
java -cp NamedEntitiesApp NamedEntitiesGUI
```

The GUI simply lists the items and does not implement advanced features.
3 changes: 3 additions & 0 deletions java-apps/data/cities.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1#Αθήνα#Αθήνα#Αθήνας#Αθήνα#Αθήνα#Αθήνα#Αθήνα#feminine#Athens#Attica
2#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκης#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκη#feminine#Thessaloniki#Central Macedonia
3#Πάτρα#Πάτρα#Πάτρας#Πάτρα#Πάτρα#Πάτρα#Πάτρα#feminine#Patras#Western Greece
3 changes: 3 additions & 0 deletions java-apps/data/namedEntities.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνικής Πινακοθήκης#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#feminine#National Gallery#Museum
2#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστημίου Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#neuter#University of Athens#University
3#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνούς Αεροδρομίου Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#neuter#Athens International Airport#Airport