1

そこで、カスタム メニューを作成しています。これは、正しいメソッドの呼び出しを処理するサブメニュー アイテム クラスです。現在、メソッド名に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) {
    }
}

Actions クラス (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();
    }
}
4

1 に答える 1

1

コマンド パターンを使用します。

オブジェクト指向プログラミングでは、コマンド パターンは動作設計パターンであり、オブジェクトを使用して、後でメソッドを呼び出すために必要なすべての情報を表現およびカプセル化します。この情報には、メソッド名、メソッドを所有するオブジェクト、およびメソッド パラメータの値が含まれます。

http://en.wikipedia.org/wiki/Command_patternから

この例は、あなたの問題に非常に似ています:

http://alvinalexander.com/java/java-command-design-pattern-in-java-examples

于 2014-04-26T20:45:57.550 に答える