2016-10-11 90 views
0

我有一個gui類,它有三個不同的JButtons鏈接到一個ActionListenerJava動作監聽器和JButtons

ActionListener類中,我希望這三個JButtons之間的交互方式允許程序「記住」之前點擊過哪個按鈕。

例如:

  1. 如果Button1的點擊 - >記住這一點,
  2. 然後,當按鈕2被點擊下一頁:做一個動作相對於BUTTON1被點擊。

換句話說,如果button1單擊,現在在if子句內檢查button2單擊。

現在getActionCommand()不允許我使用嵌套的if語句,因爲它只檢查當前點擊的按鈕並且沒有「內存」。

public void actionPerformed(ActionEvent e){ 
    if (Integer.parseInt(e.getActionCommand()) == 0){ 
    System.out.println("This is Jug 0"); 
    // wont be able to print the following 
    if (Integer.parseInt(e.getActionCommand()) == 1){ 
     System.out.println("This is Jug 1 AFTER jug 0"); //I will never be able to print this 
    } 
    } 
} 
+0

什麼意思'被點擊下一個'?同時允許他不允許檢查他的電子郵件嗎? –

回答

2

從我的你在找什麼待辦事項理解......

因此,實現這一目標的一個方法是創建一個實例變量是一個布爾值,因此將被設置爲true的按鈕已被先前點擊,然後你可以檢查你的方法,如果該標誌已被設置爲true。 該方法的缺點是,一旦點擊一次,該標誌將始終爲真。您必須實施重置此標誌的方法。

private boolean hasButtonOneBeenPressed = false; //set this to true when the button has been clicked 

public void actionPerformed(ActionEvent e){ 
    if (Integer.parseInt(e.getActionCommand()) == 0 && !hasButtonOneBeenPressed){ 
    System.out.println("This is Jug 0"); 
    // wont be able to print the following 
    } else if(Integer.parseInt(e.getActionCommand()) == 1 && hasButtonOneBeenPressed){ 
     System.out.println("This is Jug 1 AFTER jug 0"); 
    } else { 
     //do something else 
    } 
} 
+0

我正在尋找一個比這更優雅的方法,比如可能是內置到動作偵聽器中的屬性。然而,我最終使用了這種方法,因爲它完成了工作,其他答案也是一樣的。 – hmz

1

你給了ActionListener的行爲 - 它有一個actionPerformed方法,但你還沒有給它狀態 - 字段,允許它來記住它是什麼,它的完成。一個或兩個布爾字段可能只是您在這裏需要的。無論是那個或者你放置最後一個按鈕的JButton字段 - 全部取決於你想要用這個信息做什麼。例如,如果你正在編寫一個記憶遊戲,那麼你可以有一個JButton字段來保存最後一個按鈕。如果actionPerformed上的字段爲null,則知道用戶正在按第一個按鈕,因此將其分配給該字段。如果該字段在按下actionPerformed時按住按鈕,則您知道按下第二個按鈕。如果它與第一個不一樣,則比較圖像圖標並作出相應的處理,然後將JButton字段設置爲null。

0

我只是假設你只想按最後一個按鈕,所以你只需要一個變量來存儲你的最後一個按鈕。 如果你想要全按鈕按下歷史記錄,只需使用一個數組,您可以添加按下的按鈕。

PS:這對ActionListeners使用java 8 lambda表達式。

private void initComponents() { 
    JButton b1 = new JButton(); 
    JButton b2 = new JButton(); 
    JButton b3 = new JButton(); 
    b1.addActionListener((e)-> onButton1Pressed()); 
    b2.addActionListener((e)-> onButton2Pressed()); 
    b3.addActionListener((e)-> onButton3Pressed()); 
} 

int lastButton = -1; 
private void onButton1Pressed() { 
    switch (lastButton) { 
     case 1: 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     default: 
      break; 
    } 
    lastButton = 1; 
}  

private void onButton2Pressed() { 
    switch (lastButton) { 
     case 1: 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     default: 
      break; 
    } 
    lastButton = 2; 
} 
+0

你會如何將諸如b1.addActionListener((e))指向像onButton1Pressed())這樣的特定方法; – hmz

+0

這行代碼是這樣做的: b1.addActionListener((e) - > onButton1Pressed()); – Beowolve