aClicked
との2つを初期化します。からfalse
を初期化します。
ユーザーがクラスAのボタンをクリックすると、aClicked
をtrue
に設定します。その後、次のロジック実行:ユーザーは、クラスBのボタンをクリックすると
if (aClicked && bClicked)
{
new ClassC();
}
aClicked = false;
bClicked = false;
をtrue
bClicked
に設定。その後、同じロジックを実行します。
私はより良い答えのために詳細が必要です。
EDIT:あなたのコードサンプルと匿名クラスを使用して、私は次のように書いています。私は通常JavaでGUIを書いていませんし、そうしたときにはWindowBuilderを使っています。この点はおそらくスレッドセーフではなく、リソースを適切にクリーンアップできないかもしれないが、final
キーワードを使用して匿名クラス内の変数boolean
を参照するという概念を示すことが重要である。
これは私のために働いた。それがあなたを助けないなら、私はあなたのコードをもっと必要とします。
また、State
クラスのロジックが複雑になる場合は、Jake Greeneが推奨するFSMアプローチをお勧めします。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class Main {
public static void main(String[] args) {
final State state = new State();
final JTextArea textArea = new JTextArea(1, 10);
textArea.setEditable(false);
JButton buttonA = new JButton("Button A");
buttonA.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
state.clickA();
if (state.bothClicked()) {
textArea.setText("both clicked.");
}
}
});
JButton buttonB = new JButton("Button B");
buttonB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
state.clickB();
if (state.bothClicked()) {
textArea.setText("both clicked.");
}
}
});
JButton reset = new JButton("Reset!");
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
state.reset();
textArea.setText("");
}
});
JPanel pane = new JPanel();
pane.add(buttonA);
pane.add(buttonB);
pane.add(textArea);
pane.add(reset);
JFrame frame = new JFrame();
frame.setContentPane(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class State {
private boolean aClicked;
private boolean bClicked;
public void clickA() {
this.aClicked = true;
}
public void reset() {
this.aClicked = false;
this.bClicked = false;
}
public void clickB() {
this.bClicked = true;
}
public boolean bothClicked() {
return this.aClicked && this.bClicked;
}
}
ようこそstackoverflow。 Fyiでは、独自の質問を更新して、コードや詳細を追加することができます。 (私はこのポストにイベントコードを移動してより良い視認性を実現しました) – Leigh