2016-05-10 8 views
0

Ich frage mich, ob es möglich ist, dass, wenn ein JButton zweimal gedrückt wird, eine Schaltfläche sich selbst deaktiviert, mit anderen Worten wird es .setEnabled (false);Wie JButton nach zwei Klicks deaktivieren?

Dies ist der Code, den ich bisher habe. Ich will es so, dass, wenn Respin gedrückt wird zweimal dann btnRespin auf false

 //This is the code for spinning the wheels once hold is pressed 
    if (event.getSource() == btnHold1 && "THIS IS WHERE I NEED THE CODE FOR IF THE BUTTON IS PUSHED TWICE") 
    { 
     counter = 0; 
     timer1.stop(); 
     btnHold1.setEnabled(false); 
    } 
+0

Fügen Sie Ihrem Event-Source-Handler einen Zähler hinzu und wenn btnHold1 rückwärts gedrückt wird, dann deaktivieren Sie es. – Tdorno

Antwort

2

Sie einen Klick Zähler

wie ein int i = 0 verwenden kann eingestellt werden; und erhöhen jeder darauf klicken

und überprüfen, wenn es oben ist 1

+0

Wenn Sie bei 0 beginnen, dann müsste er überprüfen, wenn es über 1 ist, anstatt 2. – ManoDestra

+0

@TDorno meinst du so int angeklickt = 0; private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) { geklickt ++; System.out.println (angeklickt); } – MichaelG

+0

@MichaelG Ja, aber fügen Sie nach dem Klicken auf ++ Code ein, um zu überprüfen, ob es über 1 ist, und deaktivieren Sie Ihre Schaltfläche. – ManoDestra

0

Ja, was Sie versuchen, ist möglich zu erreichen. Wenn Sie die Anzahl der Klicks in diesem Fall zählen möchten, können Sie verwenden:

event.getClickCount() == 2 

Wenn Sie die Taste auf einem zweiten Klick deaktivieren möchten, das heißt: einmal klicken dann erneut aktivieren zu deaktivieren. Das scheint mir, was du versuchst zu tun.

Ich würde vorschlagen, das click -Ereignis für diese Schaltfläche zu verwenden und ein Inkrement zu haben und überprüfen Sie Ihren Zähler. ex:

public counter = 0; 
private void functionForButtonClick (Events, handlers etc..){ 
    counter++; 
    if(counter%2 == 0){ 
     btnHold1.setEnabled(false); 
    } 
} 
+0

Wenn ich den Code event.getSource() == btnHold1 && (Zähler% 2 == 0) dann einmal btnHold1 gedrückt wird dann btnRespin ist vollständig deaktiviert. ich brauche es so, dass, wenn Respin zweimal gedrückt wird, dann ist es deaktiviert – MichaelG

+0

Können Sie den genauen Code-Ausschnitt, den Sie ausführen, posten? Zähler% 2 == 0 Bedingung ist nur in Schritten von 2 Einheiten erfüllt. Wie bei jedem zweiten Klick ist die Bedingung erfüllt. –

0

Wenn Sie ein Action und erhöht einen Zähler für jedes Ereignis verwenden, können Sie ein Problem haben, wenn der Benutzer auf die Schaltfläche klickt, dann 5 Minuten klickt später wieder, wird es dieses zweite Ereignis sehen, wie Doppelklicken Sie und deaktivieren Sie die Schaltfläche. Vermutlich möchten Sie es nur deaktivieren, wenn der Benutzer wirklich doppelklickt (innerhalb des Systemdoppelklickintervalls). Sie können dafür einen eigenen Zeitgeber verwenden oder stattdessen einen MouseListener mit diesem Code verwenden:

@Override 
public void mousePressed(MouseEvent ev) { 
    if (ev.getClickCount() == 2) { 
     ((JButton)ev.getSource).setEnabled(false); 
    } 
} 

Beachten Sie, dass der Benutzer weiterhin die Leertaste verwenden kann, um die Schaltfläche zu drücken, aber das zweimalige schnelle Tippen auf das Leerzeichen wird nicht als Doppelklick angezeigt.

+0

Keine der Lösungen funktioniert für mich. Ich brauche also, wenn btnRespin zweimal gedrückt wird, dann wird es sich selbst deaktivieren. Alle obigen Lösungen deaktivieren btnRespin, nachdem "Hold1" gedrückt wurde – MichaelG

0

Versuchen Sie folgendes:

private class ClickHandler extends MouseAdapter { 

    @Override 
    public void mouseClicked(MouseEvent ev) { 
     if (ev.getClickCount() >= 2) { 
      ((JButton)ev.getSource).setEnabled(false); 
     } 
    } 
} 

mouseClicked Ereignis würde behandeln Ihre Taste gedrückt und Ereignis freigegeben.

Verwandte Themen