まず最初に-コードの壁について申し訳ありませんが、それはそれほど恐ろしいことではなく、私が説明しようとしていることのフレームワークにすぎません。エラーなしで実行されます。
目標
GUI用に再利用可能なボタンクラスを作成しています。各ボタンオブジェクトは、クリックされたときに異なるハンドラーを持つ必要があります。ClickHandler新しいボタンごとにオブジェクトを割り当てたい。次に、ボタンはinit()ハンドラーを呼び出し、その途中にあります。残念ながら、各ハンドラークラスの名前が異なるため、入力に問題があります。
現在の進行
現在、ハンドラーはと入力されHandlerAていますが、「SettingsHandler」や「GoToTheWahWah」などの任意の名前を処理するようにしたいと思います。
ジェネリック型をいじってみましたが、これは初めてで、webdevのバックグラウンドからすると、概念的なハードルがあります。これは問題に取り組む正しい方法ですか?
コード
ReuseableButton.javaは再利用可能なクラスであり、変更されるのはクリックされたときのアクションだけです。
package gui;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ReuseableButton extends JButton implements ActionListener {
private static final long serialVersionUID = 1L;
// I want a generic type here, not just HandlerA!
private HandlerA ClickHandler;
// Assemble generic button
public ReuseableButton(Container c, String s) {
super(s);
addActionListener(this);
c.add(this);
}
// Once again, generic type, not just HandlerA!
public void SetClickHandler(HandlerA ch) {
ClickHandler = ch;
}
// Call init() from whatever class has been defined as click handler.
public void actionPerformed(ActionEvent e) {
ClickHandler.init();
}
}
Controller.javaフレームを起動し、必要に応じてボタンを組み立てます(現在、ボタンは1つだけです)。
package gui;
import javax.swing.*;
import java.awt.*;
public class Controller extends JFrame {
private static final long serialVersionUID = 1L;
public Controller() {
JFrame frame = new JFrame("Handler Test GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = frame.getContentPane();
pane.setLayout(new FlowLayout());
ReuseableButton b = new ReuseableButton(pane,"Reuseable Button A");
// THE QUESTION IS HERE: Pass a generic object?
b.SetClickHandler(new HandlerA());
frame.pack();
frame.setSize(200,200);
frame.setVisible(true);
}
public static void main(String args[]) {
new Controller();
}
}
HandlerA.javaボタンクリックのランダムハンドラーのサンプルです。後で、、などが存在する可能性がありHandlerBますHandlerC。
package gui;
// A random handler
public class HandlerA {
public void init() {
System.out.println("Button clicked.");
}
}
よろしくお願いします!