Поэтому я создаю пользовательское меню, и это класс элемента подменю, который обрабатывает правильный метод. В настоящее время я использую оператор switch для имени метода, но это лучший способ сделать это?
Мне понравился бы новый набор глаз, я долго смотрел на этот путь. Благодарю!
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
import com.as.devcenter.Util;
public class MenuSubItem extends JLabel implements MouseListener {
private static final long serialVersionUID = 1L;
private String action = "";
public MenuSubItem(String label, String action, Class<?> className) {
addMouseListener(this);
this.action = action;
setText(label);
setName(action);
setSize(Util.widthOfText(getText(), Util.getDefaultFont()) + 4, 22);
}
/*
* Start Mouse Events
*/
@Override
public void mouseClicked(MouseEvent e) {
Util.log("MenuSubItem clicked");
if (action.equalsIgnoreCase("")) {
Util.log("No action was provided for MenuSubItem: " + getText());
} else {
try {
Method method = Actions.class.getDeclaredMethod(action, className);
switch (method.getName()) {
case "newProject":
NewProjectFrame npf = new NewProjectFrame();
method.invoke(npf, npf);
break;
case "openConsole":
Console console = new Console();
method.invoke(console, console);
break;
}
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
if (e1 instanceof NoSuchMethodException) {
Util.log("Could not identify action: " + action);
} else {
e1.printStackTrace();
}
}
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
Класс действий (просто есть 2 метода atm, но будет больше)
public class Actions {
public static void newProject(NewProjectFrame npf){
npf.setup();
Util.getProgram().items[0].clear();
}
public static void openConsole(Console console){
console.setup();
Util.getProgram().items[0].clear();
}
}
Используйте шаблон команды:
В объектно-ориентированном программировании шаблон команды представляет собой поведенческий шаблон проектирования, в котором объект используется для представления и инкапсуляции всей информации, необходимой для вызова метода позднее. Эта информация включает имя метода, объект, которому принадлежит метод и значения для параметров метода.
С http://en.wikipedia.org/wiki/Command_pattern
Этот пример очень похож на вашу проблему:
http://alvinalexander.com/java/java-command-design-pattern-in-java-examples