2012-03-31 6 views
2

Ich versuche Java zu bekommen, eine Aktion nach einem Klick auszuführen und dann eine andere, wenn dieselbe Taste erneut gedrückt wird, unabhängig davon, wie lange zwischen den Klicks. Ist das möglich? Hier ist, was ich bisher versucht:Getrennte Aktionen bei jedem Mausklick

button.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     if (e.getClickCount()%2 == 1) { 
      System.out.println("You have clicked once"); 
     } 

     if(e.getClickCount()%2 == 0){ 
      System.out.println("You have clicked twice"); 
     } 
    } 
}); 

Das ist nicht, was ich nach, weil es auf die Schaltfläche einige Timer zu sein scheint es eher wie ein Doppelklick zu machen. Also benutze ich offensichtlich die falsche Methode oder etwas, aber ich weiß nicht, welche anderen Möglichkeiten es gibt. Ich will es egal wie schnell du nach dem ersten Klick die Maus wieder drückst. Hoffnung, die Sinn macht. Jede Hilfe würde sehr geschätzt werden, danke.

+0

Wenn ich mich richtig erinnere, 'getClickCount' sagt, ob es sich um eine Ein-Klick war oder ein Doppelklick auf, nicht die Anzahl der Male ist es insgesamt angeklickt worden. Sie müssten eine Variable pflegen, um sie manuell zu verfolgen. – Dylan

Antwort

6

Sie können es tun, indem Sie eine Flagge verwenden. Etwas wie:

private boolean isFirstClick = true; 

// ... 

button.addMouseListener(new MouseAdapter() 
{ 
    public void mouseClicked(MouseEvent e) 
    { 
     if(isFirstClick) 
     { 
      System.out.println("You have clicked once"); 
      isFirstClick = false; 
     } 
     else 
     { 
      System.out.println("You have clicked twice"); 
      isFirstClick = true; 
     } 
    } 
}); 
+1

Genau - 1+. Und die allgemeine Antwort ist, dem Hörer einen Zustand zu geben. –

1

Sie können auch einen n-Zustand-Taste wie folgt erstellen:

JButton button = new JButton() { 
    private int state = 0; 
    private int maxStates=3; 
    { 
    addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
     if (state>=maxStates) state=0; 
     switch (state++) { 
      case 0: 
      System.out.println("State 0"); 
      break; 
      case 1: 
      System.out.println("State 1"); 
      break; 
      case 2: 
      System.out.println("State 2"); 
      break; 
     } 
     } 
    }); 
    } 
}; 
0

Da niemand dachte ich geantwortet hat, würde ich die Lösung dieses Problems setzen.

Dies kann durch Festlegen der Schaltfläche Name oder Schaltfläche Text oder eine andere Eigenschaft, wie Sie möchten, um mit jedem Mausklick aktualisiert werden und verwenden Sie sie in einer if else-Anweisung wie erforderlich. Zum Beispiel:

if(button.getText().equalsIgnoreCase("Lock")) { 
    mainWindowPanel.setVisible(false); 
    button.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/lock-open.png"))); 
    button.setText("Unlock"); 
} else { 
    mainWindowPanel.setVisible(true); 
    button.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/lock.png"))); 
    button.setText("Lock"); 
}