JRadioButtons in Buttongroup deaktivieren

Hallo liebes Forum

habe mal wieder ein problem, habe zwar schon dafür eine lösung aber die gefällt mir noch nicht richtig.
es dreht sich um folgendes, und zwar habe ich eine liste mit radiobuttons um eine datei zuselektieren. wenn nun ein vorgang gestartet wird soll die selektion der button verhindert werden, d.h. solang dieser vorgang läuft solll der aktuelle button selektiert bleiben, aber kein andere button sollte selektiert werden können.

dafür habe ich die lösung, das ich bei start des vorgangs alle button .setEnable(false) setze und beim beenden des vorganges setEnable(true);

sieht so aus:

		// TODO Auto-generated method stub
		Enumeration<AbstractButton> btn = btngrp.getElements();
		while (btn.hasMoreElements()) {
			btn.nextElement().setEnabled(false);
		}
	}

	private void enableButton() {
		Enumeration<AbstractButton> btn = btngrp.getElements();
		while (btn.hasMoreElements()) {
			btn.nextElement().setEnabled(true);
		}
	}```

jetzt ist des allerdings so das die dann ja ausgegraut werden und bei wieder aktivierung ist die selektion weg

gibt es keine möglichkeit die ganze group nur für selektion zu deaktivieren??

ansonsten müsste ich vor disableButton() mir die aktuelle selektion speichern und dann bei enableButton() diesen button wieder selektieren.


edit:
habe auch versucht den jradiobuttons ein actionlistener zuzuweisen, das hat aber ja keine auswirkung, weil der für die selektion muss iwo in der buttongroup versteckt sein. verwendet die buttongroup automatisch ein buttonmodel? dann müsste ich ja ansich nur mein eigens buttonmodel schreiben, bei der ich den actionlistener überschreibe..

Müssen denn die Buttons während des Vorgangs angezeigt bleiben?
Wenn nicht, könnte man ganz einfach z.B. per [japi]CardLayout[/japi] die Buttons ausblenden und eine Information z.B. ein [japi]JProgessBar[/japi] mit dem Verlauf anzeigen. Wenn der Vorgang abgeschlossen ist, blendet das CardLayout wieder zurück.

auch kein schlecht ansatz, aber ich zeige den status schon daneben an.

habe noch ein ansatz mit nem actionlistener versucht, der funktioniert allerdings nicht, da die frage wieso?

also hier mein actionlistener:

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if (!run) {
			Enumeration<AbstractButton> btn = btngrp.getElements();
			while (btn.hasMoreElements()) {
				if (btn.nextElement().equals(e.getSource())) {
					((JRadioButton) e.getSource()).setSelected(true);
				} else {
					((JRadioButton) e.getSource()).setSelected(false);
				}
			}
		}
	}```

erzeugung der jradiobutton

```JRadioButton tmpbtn = new JRadioButton(fwconfigs.get(i)
						.getName());
				// tmpbtn.setEnabled(!run);
				tmpbtn.addActionListener(this);
				tmpbtn.addItemListener(it);
				tmpbtn.setBackground(Color.WHITE);
				btngrp.add(tmpbtn);```

der wird ausgeführt und die schleifen aus so durchlaufen (mit system.out überprüft) allerdings kann ich trotzdem nach belieben selektieren, da muss noch ein andere actionlistener im spiel sein?!

Wenn ich das jetzt richtig verstehe:
Die Selektion, die der Benutzer macht, hat nichts mit dem Ererignis zu tun. Die Komponente ist losgelöst vom Model und dem Erergnis. Was du siehst, die die Funktion der Komponente, nicht deren Erergnisauswertung.

Möglich wäre auch eine GLassPane über das Panel für den Zeitraum des Vorgangs zu legen, dann kommt man auch nicht mehr an die darunterliegenden Komponenten heran.

zum progamm ablauf:
es dreht sich um firmware-updates für router/switche

dazu kann der benutzer “konfigurationen” festlegen, eine art schrittkette.

diese konfiguratioen werden als jradiobuttons angezeigt, wird ein button selektiert werden dessen schritte in einer liste angezeigt.

wird der prozess gestartet wird der aktuelle schritt selektiert und zusätzlich werden daten über verbleibende zeit und anzahl an geräte usw… angezeigt

nur ist aben das problem das die liste mit jeder selektion geändert wird und daher möchte ich die selektion blockieren. das mit dem glasspane sieht gut aus werd ich ausprobieren

edit:

ich komm mit dem glasspane nicht weiter, ich habe keine schimmer wie ich das anstellen soll, ich muss das ja über da panel legen in dem meine jradiobutton liegen, aber wie bekomme ich das hin? ich kann doch nur jframe.setGlassPane() nehmen?

und wie bekomme ich überhaupt einen transparentenhintergrund?

jetzt ist des allerdings so das die dann ja ausgegraut werden und bei wieder aktivierung ist die selektion weg

gibt es keine möglichkeit die ganze group nur für selektion zu deaktivieren??

ansonsten müsste ich vor disableButton() mir die aktuelle selektion speichern und dann bei enableButton() diesen button wieder selektieren.

Ich bin mir nicht sicher, ob ich das richtig verstehe:
Ein Radiobutton ist selektiert. Für alle Radiobuttons werden setEnabled(false) und nach einiger Zeit setEnabled(true) aufgerufen und hinterher ist kein Radiobutton mehr selektiert?

Falls ja, dann ist das aber nicht das „übliche“ Verhalten. Bau doch mal ein kleines, vollständiges Beispiel, in dem das Verhalten auftritt.

Kannst du nicht einfach alle Buttons ausser dem selektierten disabeln und den selektierten lassen wie er ist?

Mir ist ein solchen Verhalten auch nicht bekannt. setEnable hat normalerweise keine Auswirkung auf den Selectedzustand eines Buttons.

Zur GlassPane per setGlassPane Komponente als GlassPane setzen und diese per setVisible „aktivieren“ bzw. „deaktivieren“. Wichtig ist der GlassPane Komponente einen MouseListener und ggf. einen KeyListener zu zuweisen, damit solche Events abgefangen werden.

Worauf bezog sich „transparentenhintergrund“? Komponenten kann man per setOpaque(false) durchsichtig machen.