diff --git a/java-apps/CitiesApp/CitiesGUI.java b/java-apps/CitiesApp/CitiesGUI.java new file mode 100644 index 0000000000..9769b6501c --- /dev/null +++ b/java-apps/CitiesApp/CitiesGUI.java @@ -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 cities; + + public CitiesGUI() { + super("Cities Viewer"); + cities = loadCities("../data/cities.txt"); + setupUI(); + } + + private List loadCities(String path) { + List 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)); + } +} diff --git a/java-apps/CitiesApp/City.java b/java-apps/CitiesApp/City.java new file mode 100644 index 0000000000..ec4ae9da84 --- /dev/null +++ b/java-apps/CitiesApp/City.java @@ -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; } +} diff --git a/java-apps/NamedEntitiesApp/NamedEntitiesGUI.java b/java-apps/NamedEntitiesApp/NamedEntitiesGUI.java new file mode 100644 index 0000000000..59ee383262 --- /dev/null +++ b/java-apps/NamedEntitiesApp/NamedEntitiesGUI.java @@ -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 entities; + + public NamedEntitiesGUI() { + super("Named Entities Viewer"); + entities = loadEntities("../data/namedEntities.txt"); + setupUI(); + } + + private List loadEntities(String path) { + List 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)); + } +} diff --git a/java-apps/NamedEntitiesApp/NamedEntity.java b/java-apps/NamedEntitiesApp/NamedEntity.java new file mode 100644 index 0000000000..575771503b --- /dev/null +++ b/java-apps/NamedEntitiesApp/NamedEntity.java @@ -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; } +} diff --git a/java-apps/README.md b/java-apps/README.md new file mode 100644 index 0000000000..352d9d91c3 --- /dev/null +++ b/java-apps/README.md @@ -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. diff --git a/java-apps/data/cities.txt b/java-apps/data/cities.txt new file mode 100644 index 0000000000..9f9cbcb93b --- /dev/null +++ b/java-apps/data/cities.txt @@ -0,0 +1,3 @@ +1#Αθήνα#Αθήνα#Αθήνας#Αθήνα#Αθήνα#Αθήνα#Αθήνα#feminine#Athens#Attica +2#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκης#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκη#Θεσσαλονίκη#feminine#Thessaloniki#Central Macedonia +3#Πάτρα#Πάτρα#Πάτρας#Πάτρα#Πάτρα#Πάτρα#Πάτρα#feminine#Patras#Western Greece diff --git a/java-apps/data/namedEntities.txt b/java-apps/data/namedEntities.txt new file mode 100644 index 0000000000..b4a1f37072 --- /dev/null +++ b/java-apps/data/namedEntities.txt @@ -0,0 +1,3 @@ +1#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνικής Πινακοθήκης#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#Εθνική Πινακοθήκη#feminine#National Gallery#Museum +2#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστημίου Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#Πανεπιστήμιο Αθηνών#neuter#University of Athens#University +3#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνούς Αεροδρομίου Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#Διεθνές Αεροδρόμιο Αθηνών#neuter#Athens International Airport#Airport