RadioButton-Gruppe in Kombination mit einem Button

Jahe88

Mitglied
Moin Moin,
bin leider ein blutiger Java-Anfänger und habe da ein Problemchen, wegen dem ich inzwischen schon wirklich viel rum geguckt habe, aber kein Ergebnis gefunden habe.

Es geht darum, dass ich in einem JFrame auf einem JPanel zwei RadioButton-Gruppen und einen Button habe.
Ich möchte nun das der Button erst dann drückbar wird, wenn von jeder ButtonGroup jeweils ein RadioButton ausgewählt ist. Heißt der Button soll solange den Zustand false haben, bis jeweils ein Radiobutton aus den zwei Gruppen ausgewählt wurde.

Java:
Panel = new JPanel();

Gruppe1 = new ButtonGroup();

Mauer = new JRadioButton("Mauer");
Fressen = new JRadioButton("Fressen");

Gruppe1.add(Mauer);
Gruppe1.add(Fressen);
Panel.add(Mauer);
Panel.add(Fressen);

Gruppe2 = new ButtonGroup();

a = new JRadioButton("A");
b = new JRadioButton("B");
c = new JRadioButton("C");

Gruppe2.add(A);
Gruppe2.add(B);
Gruppe2.add(C);
Panel.add(A);
Panel.add(B);
Panel.add(C);

button = new JButton("Start");
button.setEnabled(false);

Panel.add(button);

ich bin inzwischen ziemlich ratlos wie ich dieses Problem lösen kann.
Mir kommt es so vor als müsste das durch eine simple IF-Bedingung lösbar sein, in der am Ende der Zustand vom Button auf button.setEnabled(true); gesetzt wird, aber alle meine Versuche sind kläglich gescheitert, kann jemand von euch mir (hoffentlich) weiterhelfen?
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Hast du für den (die) RadioButtton(s) einen ActionListener registiert? Ich sehe in deinem Code keinen Listener.
Du kannst das vielleicht so erreichen:
Java:
JRadioButton radioButtonA = new JRadioButton();
radioButtonA.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if(!allelehrer.isEnabled()) {
			button.setEnabled(true);
		}
		else {
			button.setEnabled(false);
		}
	}
});
 
Zuletzt bearbeitet:

Jahe88

Mitglied
bis jetzt habe ich noch keine ActionListener die sich auf die RadioButtons beziehen.
aber wie könnte ich deinen Code denn so umwandeln, dass er sich auf beide ButtonGroups bezieht? bzw kann das überhaupt funktionieren?



Java:
Gruppe1 && Gruppe2 = new ButtonGroup(Gruppe12);
Gruppe12.addActionListener(new ActionListener() {      
  @Override   
 public void actionPerformed(ActionEvent e) { 
       if(!allelehrer.isEnabled()) {
            button.setEnabled(true);  
      }    
    else 
{        
    button.setEnabled(false);       
 }    }});

ist sowas möglich?!
das ich die buttongroups erstmal zusammenfasse und dann auf die übergruppe einen actionlistener wirken lasse?
 

knilch

Bekanntes Mitglied
Hi,
Für eine ButtonGroup- Instanz kannst du kein Listener registieren. Das geht nur bei den RadioButtons (Buttons, CheckBox etc.) Das Gruppieren von RadioButtons ist so gedacht, dass immer nur ein RadioButton der selben Gruppe selektiert ist. Sobald du auf einen nicht-selektieren RadioButton drückst, wird der vorher selektiere RadioButton deselektiert.
Wenn für alle JRadioButtons der selben Gruppe der Button enabeld / disabled werden soll, muss für jeden JRadioButton ein ActionListener registriert werden.
Java:
ButtonGroup groupA = new ButtonGroup();
radioButtonA = new JRadioButton("RadioButton A");
radioButtonB = new JRadioButton("RadioButton B");

groupA.add(radioButtonA);
radioButtonA.setBounds(10, 300, 200, 24);
groupA.add(radioButtonB);
radioButtonB.setBounds(10, 330, 200, 24);

radioButtonA.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		if(!button.isSelected()) {
			button.setEnabled(true);
		}
		else {
			button.setEnabled(false);
		}
	}
});

radioButtonB.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		if(!button.isSelected()) {
			button.setEnabled(true);
		}
		else {
			button.setEnabled(false);
		}
	}
});
this.getContentPane().add(radioButtonA);
this.getContentPane().add(radioButtonB);
 

Jahe88

Mitglied
Heißt auf mein Problem bezogen ist das, was ich mir vorstelle, nicht möglich?!

das der button erst dann freigeschaltet wird wenn je einer der radiobuttons aus beiden Gruppen gewählt wurde.

oder kann ich nur für die Gruppe2 Actionlistener einbauen in denen in der if-bedingung steht, dass wenn einer der RadioButtons aus Gruppe1 gewählt ist erst dann das alles passiert?

in etwa so?!

Java:
radioButtonA.addActionListener(new ActionListener() {  
      @Override  
  public void actionPerformed(ActionEvent arg0) {   
     if(Fressen.isSelected() | Mauer.isSelected() && radioButtonA.isSelected()) {     
       button.setEnabled(true);       
 }
        else
 {   
         button.setEnabled(false);  
      }    }});
 

knilch

Bekanntes Mitglied
Doch,
das geht schon.
Mal Annahme:
4 RadioButtons.
2 ButtonGroup.
Je 2 RadioButtons sind in einer Gruppe.
Du willst nun dass von jeder Gruppe 1 RadioButton selektiert werden muss, bevor der JButton aktiv wird.
Dazu musst du für jeden RadioButton einen ActionListener implementieren und in jedem von diesem ActionListener musst du spezifisch festlegen, wann der JButton aktiv werden soll.

Wenn Fressen.isSelected() | Mauer.isSelected() JRadioButtons sind, ist der Ansatz schon mal gut so.
Java:
...
if(Fressen.isSelected() | Mauer.isSelected() && radioButtonA.isSelected()) {     
       button.setEnabled(true);
}     
...
Hier mal ein Beispiel:
radioButtonA & radioButtonB sind in GruppeA und radioButtonC & radioButtonD in GruppeB
Java:
radioButtonA.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {		
		if(!radioButtonC.isSelected() && !radioButtonD.isSelected()) {
			button.setEnabled(false);
		}
		else {
			button.setEnabled(true);
		}
	}
});

radioButtonB.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {	
		if(!radioButtonC.isSelected() && !radioButtonD.isSelected()) {
			button.setEnabled(false);
		}
		else {
			button.setEnabled(true);
		}
	}
});

radioButtonC.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {	
		if(!radioButtonA.isSelected() && !radioButtonB.isSelected()) {
			button.setEnabled(false);
		}
		else {
			button.setEnabled(true);
		}
	}
});

radioButtonD.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {	
		if(!radioButtonA.isSelected() && !radioButtonB.isSelected()) {
			button.setEnabled(false);
		}
		else {
			button.setEnabled(true);
		}
	}
});
Was dir aber bewusst sein muss:
Wenn du eine ButtonGroup einsetzt, dann ist nur beim Start keine default Selektion gemacht. Das heisst in deinem Fall, dass nur beim Start kein RadioButton selektiert ist. Sobald du einen RadioButton in einer Gruppe selektierst, kannst du in dieser Gruppe keinen RadioButton mehr "deselektieren". Das heisst, einer der RadioButtons in der Gruppe ist IMMER selektiert.
Wenn das so gewünscht ist, ist das mit ButtonGroup ok, wenn du aber möchtest, dass die RadioButtons alle deselektiert werden können, darfst du ButtonGroup nicht verwenden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX RadioButton.setText() AWT, Swing, JavaFX & SWT 11
A Zufallsgenerator starten bei Klick auf Radiobutton AWT, Swing, JavaFX & SWT 3
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
R JMenuItems mit Radiobutton/Haken AWT, Swing, JavaFX & SWT 2
U Radiobutton als nicht angeklickt makieren AWT, Swing, JavaFX & SWT 2
N JTable RadioButton statt Checkbox AWT, Swing, JavaFX & SWT 4
G Radiobutton checked ? AWT, Swing, JavaFX & SWT 4
G RadioButton AWT, Swing, JavaFX & SWT 1
N SWT: Frage zu Radiobutton setSelection() AWT, Swing, JavaFX & SWT 2
D RadioButton abstand entfernen AWT, Swing, JavaFX & SWT 2
C RadioButton nicht änderbar stellen, ohne das Sie grau wird AWT, Swing, JavaFX & SWT 9
D RadioButton in einer Tabelle einfügen AWT, Swing, JavaFX & SWT 3
A zurücksetzen Radiobutton AWT, Swing, JavaFX & SWT 3
M Über RadioButton öffnen? AWT, Swing, JavaFX & SWT 9
C Radiobutton-Bezeichnung mit Eingabefeld AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Java FX 3D kamera drehen oder lieber die Gruppe drehen AWT, Swing, JavaFX & SWT 10
M Swing Selektion mehrerer JToggleButton's in einer Gruppe AWT, Swing, JavaFX & SWT 5
E Swing JButton nur pressed machen und Gruppe bilden AWT, Swing, JavaFX & SWT 2
G ComboBox wird nicht angezeigt beim anhängen an eine Gruppe AWT, Swing, JavaFX & SWT 2
K Keine SWT-Komponenten-Gruppe in Palette des Visual Editor AWT, Swing, JavaFX & SWT 2
G Gruppe zusammenfassen AWT, Swing, JavaFX & SWT 3
B JavaFX ListView in Kombination mit TextField AWT, Swing, JavaFX & SWT 5
H Kombination von zwei Frames AWT, Swing, JavaFX & SWT 16
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
H AWT AffineTransform, Kombination von Translation und Rotation AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
1 Buttons in Kombination mit Linien AWT, Swing, JavaFX & SWT 3
M Ansätze zur Kombination mehrerer Listener für Interaktion AWT, Swing, JavaFX & SWT 19
T Swing Kombination von GUI-Elementen - Was mit wem ist erlaubt? AWT, Swing, JavaFX & SWT 12
T Spaltenbreite bei jTabel in Kombination mit Srollbalken AWT, Swing, JavaFX & SWT 2
reibi Kombination AWT in SWT AWT, Swing, JavaFX & SWT 6
M Grafik in JFrame in Kombination mit Steuerelementen AWT, Swing, JavaFX & SWT 2
B Problem mit der Kombination von JScrollBar und JTextArea AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben