初始化2個boolean
變量aClicked
和bClicked
到false
的實例。
當用戶單擊A級按鈕時,將aClicked
設置爲true
。然後執行以下邏輯:
if (aClicked && bClicked)
{
new ClassC();
}
aClicked = false;
bClicked = false;
當用戶點擊在類B的按鈕,設置bClicked
到true
。然後執行相同的邏輯。
我需要更多的細節纔能有更好的答案。
編輯:鑑於你的代碼示例和使用匿名類,我寫了以下內容。我通常不用Java編寫GUI,而當我這樣做時,就是使用WindowBuilder。這可能不是線程安全的,並且可能無法正確清理資源,但重點是要演示使用final
關鍵字在匿名類中引用boolean
變量的概念。
這對我有效。如果它不能幫助你,我將需要更多的代碼。
此外,對於State
類,如果您的邏輯變得更復雜,我會推薦由傑克格林推薦的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 2012-03-31 22:14:02