1

私は Java でプログラミングを始めて以来、GUI を作成したいときや、より複雑なビジネス ロジックを作成するたびに、同じ問題に遭遇します。

  1. GUI 部分をロジック部分から完全に分離するにはどうすればよいでしょうか? 編集:「ロジック部分からGUI部分」と言うのは少し間違っているかもしれません。むしろ、匿名関数や内部クラスを書いたときのような膨大な行数のファイルは必要ないため、「リスナー部分から GUI 部分」がより正確です。

結果は次のようになります。

public class MainFrame extends JFrame{
    private final Handler handler = new Handler();
    public MainFrame(){
        //some code...
        final JButton b = new JButton("Click Me!");
        b.putClientProperty("command", "some command or a static variable from a some commands class");
        b.addActionListener(this.handler);
    }
}

// another class in another file 
public class Handler implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
         if(e.getSource() instanceof JButton){
             final JButton source = (JButton)e.getSource();
             if(source.getClientProperty("command").equals("some command or a static variable from a some commands class")){
                 //do something
             }
         }
    }
}

それを行うより良い方法を知っている人がいる場合は、教えてください。

  1. アクションが実行されたときに GUI を更新して応答させるにはどうすればよいですか? 上記の例では、次のように記述したためです。

    b.addActionListener(this.handler);
    

そのため、アクションがいつ実行されたかを知るのはボタン b だけです。

最初の問題に対する私の解決策が 2 番目の問題に対して信頼できない場合は、この投稿の完全な解決策を提供してください。

より多くの方の参考になれば幸いです。

ありがとう。

4

3 に答える 3

1

ローカルでのみ使用される s の個別のクラスを避けるために、匿名クラスActionListenerとして記述できます。

Java アプリケーションでイベントを伝搬するには、 Guava のEventBusなどのイベント バス メカニズムを使用できます。

于 2013-09-19T13:23:13.927 に答える
0

Thinlet、Luxor、XUI フレームワークは、GUI をビジネス ロジックから分離するように設計されています。MVC パターンを使用してそれを可能にすることもできます。

Thinlet は、単一の Java クラスである GUI ツールキットであり、GUI の階層とプロパティを解析し、ユーザーの操作を処理し、ビジネス ロジックを呼び出します。

于 2013-09-19T13:18:37.827 に答える