Java Button aktivieren/deaktivieren ohne, dass der Button sich dabei "verdunkelt"?

...komplette Frage anzeigen

3 Antworten

Viele Wege führen nach Rom, und auch zu deiner Lösung.

Das einfachste dürfte wohl sein, dass du einen Actionlistener für deine Buttons verwendest, die nur einmalig funktionieren und sich selbst wieder entfernen, sobald man drauf gedrückt hat:

JButton btn = new JButton("Klick mich");

btn.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { System.out.println("Ich wurde geklickt, Aufgabe erledigt"); btn.removeActionListener(this); } });

Ein anderer Weg wäre das von dir genannte 'disabled' Schalten.

Weitere Ansätze wären: Du verwendest andere Komponenten, wie Beispielsweise ein Label, für das du dann z.B. einen MouseListener verwendest um eine Eingabe zu tätigen, und dann auch hier: Nach einmaliger Eingabe, die Funktion deaktivieren.

JLabel label = new JLabel("");
label.addMouseListener(new MouseListener() {

@Override public void mouseClicked(MouseEvent e) { label.setText("X"); label.removeMouseListener(this); } /** Andere Methoden wären einfach leer zu implementieren, bzw. lassen sich auch nutzen um deine UI etwas 'aufzupolieren' wie: Sobald die Maus sich auf dem Label bewegt, wird ein Rand gesetzt um die aktuelle Komponente hervor zu heben, etc.**/
});
xtheovidx 23.02.2017, 18:04

Dankeschön. Ich habe die erste Variante verwendet und jetzt funktioniert es so, wie ich will.

0

Also rückgängig machen ginge mit

button.setEnabled(true);

aber das scheint mir ja nicht gerade deine Intention zu sein. Aber warum willst du einen Button haben, den man nicht klicken kann, der aber so aussieht, als könnte man es? Ich meine, das graue Feld ist ja genau dazu da, dass der user sehen kann, dass dieser Button gerade nicht gedrückt werden kann.

Hälst du es wirklich für eine gute Idee, dem user diese Möglichkeit zu nehmen?

xtheovidx 21.02.2017, 21:00

Ich habe TicTacToe geschrieben und wenn ein Symbol gesetzt wurde, soll es weiterhin gut zu sehen sein, aber eben nicht mehr veränderbar (sonst würde ein weiterer Klick das Symbol tauschen)

0
tooneu 21.02.2017, 21:10
@xtheovidx

Wie wärs, wenn du den Button durch ein Label ersetzt? Ginge das?

0
xtheovidx 21.02.2017, 21:13
@tooneu

Ne ich hätte es gerne mit Buttons. Sonst müsste ich so viel umschreiben.

0
KnusperPudding 22.02.2017, 08:20
@xtheovidx

So viel umschreiben? 

Packe den Inhalt deines Actionlisteners in eine eigene Methode, die dann von deinem Actionlistener aufgerufen wird. 

Wenn du dann eine andere Komponente verwenden willst, kannst du einfach die Listener austauschen und dort deine aktuelle Methode aufrufen.

0

Wenn du ihm dne ActionListener wegnimmst, hat er keinen Effekt mehr, man kann ihn aber noch drücken.

Eine weitere, aber alberne Idee wäre es, den Button zu entfernen und durch ein Bild des Buttons zu ersetzen.

xtheovidx 21.02.2017, 20:49

Wie kann ich den ActionListener entfernen? Mein Code für einen der buttons, bei denen ich das machen möchte, ist gerade:

jButton3.setBounds(0, 200, 100, 100);
jButton3.setIcon(new ImageIcon("Frei.png"));
jButton3.setEnabled(false);
jButton3.setMargin(new Insets(2, 2, 2, 2));
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton3_ActionPerformed(evt);
}
});
cp.add(jButton3);

0
PerfectMuffin 21.02.2017, 22:13
@xtheovidx

Den Actionlistener, denn du da eingebaut hast und keine neue Instanz davon. Entweder zwischenspeichern oder über die Methoden von AbstractButton abfragen.

Lies die Dokumentation.

0

Was möchtest Du wissen?