diff --git a/src/main/java/gui/src/menubar/Menu.java b/src/main/java/gui/src/menubar/Menu.java new file mode 100644 index 0000000..7bfeffc --- /dev/null +++ b/src/main/java/gui/src/menubar/Menu.java @@ -0,0 +1,65 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar; + +import javax.swing.JMenu; + +import java.awt.event.ActionListener; + +import gui.src.constants.GUIConstants.Languages; +import gui.src.interfaces.Translateable; + +/** + * Menu at menu bar. + */ +public class Menu extends JMenu implements Translateable { + private String[] translations = null; + + /** + * @param translations of this menus text. + * @param actionListener belonging to this menu. Events that occur by clicking on menu depending on this. + */ + public Menu(final String[] translations, ActionListener actionListener) { + this.setTranslations(translations); + this.changeLanguage(Languages.German); + if (actionListenerValid("constructor of Menu", actionListener)) { + this.addActionListener(actionListener); + } + } + + public void setTranslations(final String[] translations) { + if (null != translations) { + this.translations = translations; + } + } + + public void changeLanguage(Languages language) { + if (translationsSet("changeLanguage")) { + this.setText(translations[language.ordinal()]); + for (int index = 0; index < this.getItemCount(); index++) { + ((MenuItem)this.getItem(index)).changeLanguage(language); + } + } + } + + private boolean translationsSet(String callingMethod) { + boolean translationsSet = true; + if (null == translations) { + translationsSet = false; + System.err.println("Error at " + callingMethod + " of menu item. translations are null"); + } + return translationsSet; + } + + private boolean actionListenerValid(String callingMethod, ActionListener actionListener) { + boolean actionListenerSet = true; + if (null == actionListener) { + actionListenerSet = false; + System.err.println("Error at " + callingMethod + " of menu item. action listener is null"); + } + return actionListenerSet; + } +} diff --git a/src/main/java/gui/src/menubar/MenuBar.java b/src/main/java/gui/src/menubar/MenuBar.java new file mode 100644 index 0000000..2d9801d --- /dev/null +++ b/src/main/java/gui/src/menubar/MenuBar.java @@ -0,0 +1,41 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar; + +import javax.swing.JMenuBar; + +import gui.src.constants.GUIConstants.Languages; + +import gui.src.interfaces.Translateable; + +import gui.src.menubar.menus.HelpMenuFactory; +import gui.src.menubar.menus.LanguageMenuFactory; + +public class MenuBar extends JMenuBar implements Translateable { + + private MenuBarLanguageController languageController = null; + + private MenuBar() { + languageController = new MenuBarLanguageController(this); + + this.add(HelpMenuFactory.createHelpMenu()); + this.add(LanguageMenuFactory.createLanguageMenu(languageController)); + } + + public static MenuBar getMenuBar() { + return new MenuBar(); + } + + public void changeLanguage(Languages language) { + changeLanguageOfMenus(language); + } + + private void changeLanguageOfMenus(Languages language) { + for (int index = 0; index < this.getMenuCount(); index++) { + ((Menu)this.getMenu(index)).changeLanguage(language); + } + } +} diff --git a/src/main/java/gui/src/menubar/MenuBarLanguageController.java b/src/main/java/gui/src/menubar/MenuBarLanguageController.java new file mode 100644 index 0000000..b8d9e69 --- /dev/null +++ b/src/main/java/gui/src/menubar/MenuBarLanguageController.java @@ -0,0 +1,22 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar; + +public class MenuBarLanguageController { + private MenuBar menuBar = null; + + public MenuBarLanguageController(MenuBar menuBar) { + this.menuBar = menuBar; + } + + public Menu getMenu(int index) { + return (Menu)this.menuBar.getMenu(index); + } + + public int getMenuCount() { + return this.menuBar.getMenuCount(); + } +} diff --git a/src/main/java/gui/src/menubar/MenuItem.java b/src/main/java/gui/src/menubar/MenuItem.java new file mode 100644 index 0000000..c2adc2f --- /dev/null +++ b/src/main/java/gui/src/menubar/MenuItem.java @@ -0,0 +1,62 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar; + +import java.awt.event.ActionListener; + +import javax.swing.JMenuItem; + +import gui.src.constants.GUIConstants.Languages; +import gui.src.interfaces.Translateable; + +/** + * Menu item at menu at menu bar. + */ +public class MenuItem extends JMenuItem implements Translateable { + private String[] translations = null; + + /** + * @param translations of this menu items text. + * @param actionListener belonging to this menu item. Events that occur by clicking on menu item depending on this. + */ + public MenuItem(final String[] translations, ActionListener actionListener) { + this.setTranslations(translations); + this.changeLanguage(Languages.German); + if (actionListenerValid("constructor of Menu", actionListener)) { + this.addActionListener(actionListener); + } + } + + public void setTranslations(final String[] translations) { + if (null != translations) { + this.translations = translations; + } + } + + public void changeLanguage(Languages language) { + if (translationsSet("changeLanguage")) { + this.setText(translations[language.ordinal()]); + } + } + + private boolean translationsSet(String callingMethod) { + boolean translationsSet = true; + if (null == translations) { + translationsSet = false; + System.err.println("Error at " + callingMethod + " of menu item. translations of are null"); + } + return translationsSet; + } + + private boolean actionListenerValid(String callingMethod, ActionListener actionListener) { + boolean actionListenerSet = true; + if (null == actionListener) { + actionListenerSet = false; + System.err.println("Error at " + callingMethod + " of menu item. action listener is null"); + } + return actionListenerSet; + } +} diff --git a/src/main/java/gui/src/menubar/menuItems/HelpMenuItemFactory.java b/src/main/java/gui/src/menubar/menuItems/HelpMenuItemFactory.java new file mode 100644 index 0000000..a2d4800 --- /dev/null +++ b/src/main/java/gui/src/menubar/menuItems/HelpMenuItemFactory.java @@ -0,0 +1,42 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar.menuItems; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import gui.src.menubar.MenuItem; + +public class HelpMenuItemFactory { + + public static MenuItem createManualMenuItem() { + final String[] translations = {"Anleitung", "Manual"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + } + }; + + MenuItem manualMenuItem = new MenuItem(translations, actionListener); + + return manualMenuItem; + } + + public static MenuItem createAboutMenuItem() { + final String[] translations = {"Über", "About"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + } + }; + + MenuItem aboutMenuItem = new MenuItem(translations, actionListener); + + return aboutMenuItem; + } +} diff --git a/src/main/java/gui/src/menubar/menuItems/LanguageMenuItemFactory.java b/src/main/java/gui/src/menubar/menuItems/LanguageMenuItemFactory.java new file mode 100644 index 0000000..6a60959 --- /dev/null +++ b/src/main/java/gui/src/menubar/menuItems/LanguageMenuItemFactory.java @@ -0,0 +1,48 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar.menuItems; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import gui.src.constants.GUIConstants.Languages; +import gui.src.menubar.MenuBarLanguageController; +import gui.src.menubar.MenuItem; + +public class LanguageMenuItemFactory { + + public static MenuItem createGermanMenuItem(MenuBarLanguageController languageController) { + final String[] translations = {"Deutsch", "German"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + for (int index = 0; index < languageController.getMenuCount(); index++) { + languageController.getMenu(index).changeLanguage(Languages.German); + } + } + }; + + MenuItem germanMenuItem = new MenuItem(translations, actionListener); + + return germanMenuItem; + } + + public static MenuItem createEnglishMenuItem(MenuBarLanguageController languageController) { + final String[] translations = {"Englisch", "English"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + for (int index = 0; index < languageController.getMenuCount(); index++) { + languageController.getMenu(index).changeLanguage(Languages.English); + } + } + }; + + MenuItem englishMenuItem = new MenuItem(translations, actionListener); + + return englishMenuItem; + } +} diff --git a/src/main/java/gui/src/menubar/menus/HelpMenuFactory.java b/src/main/java/gui/src/menubar/menus/HelpMenuFactory.java new file mode 100644 index 0000000..9e79b52 --- /dev/null +++ b/src/main/java/gui/src/menubar/menus/HelpMenuFactory.java @@ -0,0 +1,30 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar.menus; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import gui.src.menubar.Menu; +import gui.src.menubar.menuItems.HelpMenuItemFactory; + +public class HelpMenuFactory { + + + public static Menu createHelpMenu() { + final String[] translations = {"Hilfe", "Help"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + } + }; + Menu helpMenu = new Menu(translations, actionListener); + helpMenu.add(HelpMenuItemFactory.createManualMenuItem()); + helpMenu.add(HelpMenuItemFactory.createAboutMenuItem()); + return helpMenu; + } +} diff --git a/src/main/java/gui/src/menubar/menus/LanguageMenuFactory.java b/src/main/java/gui/src/menubar/menus/LanguageMenuFactory.java new file mode 100644 index 0000000..f9c415c --- /dev/null +++ b/src/main/java/gui/src/menubar/menus/LanguageMenuFactory.java @@ -0,0 +1,30 @@ +/** + * @author Aaron Moser + * @date 01.11.2023 + */ + +package gui.src.menubar.menus; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import gui.src.menubar.Menu; +import gui.src.menubar.MenuBarLanguageController; +import gui.src.menubar.menuItems.LanguageMenuItemFactory; + +public class LanguageMenuFactory { + + public static Menu createLanguageMenu(MenuBarLanguageController languageController) { + final String[] translations = {"Sprache", "Language"}; + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + } + }; + Menu languageMenu = new Menu(translations, actionListener); + languageMenu.add(LanguageMenuItemFactory.createGermanMenuItem(languageController)); + languageMenu.add(LanguageMenuItemFactory.createEnglishMenuItem(languageController)); + return languageMenu; + } +}