あなたは可能性があり...
は...直接
ActionListener
サポートを提供
class A extends JDialog {
JButton button = new JButton(" test");
public A() {
}
public void addActionListener(ActionListener listener) {
button.addActionListener(listener);
}
public void removeActionListener(ActionListener listener) {
button.removeActionListener(listener);
}
}
これは、他のクラスに(ボタンIE)の要素を公開する傾向があり、内部の実装について、彼らが知っていることを前提としていない(すなわちactionCommand
)あなたは...
が能力を提供できるダイアログ
のカスタムAction
の
class A extends JDialog {
//...
public void addAction(Action action) {
JButton btn = new JButton(action);
buttonPanel.add(btn);
}
}
を供給することは、このダイアログがAction
がAction
が提供する、それだけで、それを実行するための手段を提供し、ない「何か」を気にする必要はないことを意味します例えば
を成し遂げるために必要な作業のSA自己完結型ユニット、あなたが何かのようにそれを使用することになりAction
...のような
public class CancelAction extends AbstractAction {
public CancelAction() {
putValue(NAME, "Cancel");
}
@Override
public void actionPerformed(ActionEvent e) {
// What ever needs to be done here...
}
}
を与えられた...
今
A dialog = A();
dialog.addAction(new CancelAction());
、明らかに、あなたはあなたのニーズにアクションをカスタマイズすることができますが、Action
はその仕事をする必要がある情報を渡しますが、ダイアログは気にしません
あなたはuld ...
ダイアログが実行するアクションを指定する定義済みのインターフェースを作成します。
public interface AListener {
public void wasCancelled(A dialog);
public void wasAccepted(A dialog);
}
あなたはその後、A
のインスタンスにこのリスナーを添付し、それはそう
class A extends JDialog {
//...
private Set<AListener> listeners = new HashSet<>();
public void addAListener(AListener listener){
listeners.add(listener);
}
public void removeAListener(AListener listener){
listeners.add(listener);
}
protected void fireWasCancelled() {
for (AListener listener : listeners) {
listener.wasCancelled(this);
}
}
protected void fireWasAcceppted() {
for (AListener listener : listeners) {
listener.wasAccepted(this);
}
}
}
を実行していますとき、いくつかの「アクション」は、ダイアログ内で発生する場合、適切な行動を取るだろう(ボタンのようにクリックされました) 、あなたが登録されているすべてのリスナーに通知するために、関連するfireXxx
メソッドを呼び出します
A aDialog = new A();
aDialog.addAListener(new AListener() {
@Override
public void wasCancelled(A dialog) {
// Do stuf
}
@Override
public void wasAccepted(A dialog) {
// Do stuff
}
});
これは、ダイアログはある機能を定義します実行することを望んでおり、それらについて知る必要のないクラス間で実装の詳細を過度に公開することなく、追加のタスクを実行するための制御(およびコンテキスト)を提供します。
あなたは...
ただ、ユーザに情報を表示し、ユーザが
あなたが使用する必要があります
をやった上でフィードバックをご提供するための自己完結型のAPIを提供JOptionPane
を、使用することができます。.. ?
お客様のニーズに最も適した手法を使用してください。
個人的には、ボタン、キーバインディング、メニュー項目で使用できる自己完結型の再利用可能な作業単位であることを好みますが、非常に柔軟性がありますが、 "ok"/"cancel"ボタンは、少し殺されるかもしれません。
あなたは第二のアイデアを取り、単にあなたが「OK」をカスタマイズし、むしろ、あなたが欲しい、これまでどのようなアクションを供給するための柔軟性よりも、直接アクションを「取り消す」ことを可能にする機能を提供し、一例として可能性が
I
「Action」を自己完結型に設定して、名前やその他のプロパティを設定してみてはいかがですか。なぜなら、あなたは、あなたがそのAPIの能力を完全に把握していないように、How to Use Actionsを見ることを勧めます。あなたは '新しいJButton(new MySuperAwesomeAction())'を呼び出す必要があります...これはキーバインディングとメニュー項目でも使用できますが、そうでなければ大過剰です – MadProgrammer