Basic implementation of menu bar. Easy to add new menus.

This commit is contained in:
WickedJack99
2023-11-01 20:56:52 +01:00
parent 49e863fbad
commit 0f544cde87
8 changed files with 340 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}