SWT: RadioButton dynamisch erzeugen und abfragen

Ronin-Jay

Erfahrenes Mitglied
Hallo,

ich habe mal wieder ein kleines Problem: Wie kann ich mittels SWT RadioButton dynamisch generieren und abfragen, welcher aktiv ist?

Wenn ich folgt Button anlege,.....
Java:
for(int i=0;i<6;i++){
			button = new Button(shell, SWT.RADIO);
			button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 2, 1));
			button.setText("Button "+i);
		}

		final Button checkButton = new Button(shell, SWT.NONE);
		checkButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				//setLabel(button.getText());
			}
		});
..... habe ich sie zwar, aber kann mittels Check-Button nicht den angeklickten abfragen, da er sagt button müsse final sein. Wenn button aber final ist, geht die for-Schleife nicht
 

zerix

Hausmeister
Moderator
Hallo,

du kannst die Checkboxen so anlegen wie du es gemacht hast. Du kannst sie dann noch in der Schleife mit in einer Liste schreiben. So kannst du noch auf alle Buttons zugreifen und abfragen.

Willst du eigentlich den SelectionListener nicht den Radiobuttons hinzufügen?


MFG

zEriX
 

Ronin-Jay

Erfahrenes Mitglied
Du meinst vom Prizip her:
Java:
list.add(button);
?

Kann ich sie dann nur per list.elementAt(i) ansprechen?

Ich möchte eigentlich folgendes realisieren:
x RadioButton werden dynamisch erstellt. Dann sucht man sich einen aus und drück auf einen (normalen)Button und kann dann entsprechend handeln....
Ich brauche also den Inhalt des RadioButton, besser aber seinen Index.
 

zerix

Hausmeister
Moderator
Wenn du den SelectionListener allen Buttons hinzufügst, reagiert er doch immer wenn ein Button gewählt wurde. Mit arg0.getSource() bekommst du auch den Button der gewählt wurde.

MFG

zEriX
 

Ronin-Jay

Erfahrenes Mitglied
Wenn du den SelectionListener allen Buttons hinzufügst, reagiert er doch immer wenn ein Button gewählt wurde. Mit arg0.getSource() bekommst du auch den Button der gewählt wurde.

MFG

zEriX

Das will ich ja eben vermeiden. Ich möchte eine Liste mit RadioButton. Dort soll einer aufgewählt werden und beim Klicken auf dem im Beispiel angegeben 'checkButton' soll mir dann der Index des aktivierten RadioButton ausgegeben werden....
 

Thomas Darimont

Erfahrenes Mitglied
Hallo,

warum nicht einfach:
Java:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Thomas.Darimont
 * 
 */
public class SWTRadioButtonExample {

	String selectedChoice = "CHOICE_0";

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new SWTRadioButtonExample().open();

	}

	private void open() {
		Display display = new Display();
		Shell shell = new Shell(display);

		shell.setText("SWTRadioButtonExample");

		shell.setLayout(new GridLayout());

		Group group = new Group(shell, SWT.SHADOW_IN);
		group.setText("Select: ");
		group.setLayout(new RowLayout(SWT.VERTICAL));

		SelectionListener selectionListener = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				selectedChoice = (String) ((Button) e.getSource()).getData();
			}
		};

		for (int i = 0; i < 10; i++) {
			Button button = new Button(group, SWT.RADIO);
			button.addSelectionListener(selectionListener);
			button.setText("Choice: " + i);
			button.setData("CHOICE_" + i);

		}

		Button btnCheck = new Button(group, SWT.PUSH);
		btnCheck.setText("check");
		btnCheck.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println(selectedChoice);
			}
		});

		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

}

Gruß Tom
 

Ronin-Jay

Erfahrenes Mitglied
Wie immer sehr hilfreich und gleich mit Praxisbeispiel. Vielen lieben Dank Thomas!

P.s.: /*ScherzAn*/ Damit klappt's dann auch gleich mit der Nachbarin ;-) /*ScherzAus*/
 

Ronin-Jay

Erfahrenes Mitglied
[SWT] Radio-/CheckButton dynamisch erzeugen und abfragen

So,
für Leute die soetwas suchen habe ich das Beispiel von Thomas noch mal genommen und als CheckBox umgeschrieben, damit man auch eine multiple Auswahl registriert.

Java:
package de.tutorials;

import java.util.ArrayList;
import java.util.Iterator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Thomas.Darimont
 * 
 */
public class CheckButtonExample {

	String selectedChoice = "CHOICE_0";
	ArrayList<String> selectedElements = new ArrayList<String>();

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new CheckButtonExample().open();

	}

	private void open() {
		Display display = new Display();
		Shell shell = new Shell(display);

		shell.setText("CheckButtonExample");

		shell.setLayout(new GridLayout());

		Group group = new Group(shell, SWT.SHADOW_IN);
		group.setText("Select: ");
		group.setLayout(new RowLayout(SWT.VERTICAL));

		SelectionListener selectionListener = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				String element = (String) ((Button) e.getSource()).getData();
				if (selectedElements.contains(element)) {
					System.out.println("bereits vorhanden... - lösche es");
					selectedElements.remove(element);
				} else {
					System.out.println("füge hinzu");
					selectedElements.add(element);
				}
				//selectedElements.add(element);
			}
		};

		for (int i = 0; i < 10; i++) {
			Button button = new Button(group, SWT.CHECK);
			button.addSelectionListener(selectionListener);
			button.setText("Choice: " + i);
			button.setData("CHOICE_" + i);

		}

		Button btnCheck = new Button(group, SWT.PUSH);
		btnCheck.setText("check");
		btnCheck.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				//System.out.println(selectedElements.size());
				System.out.println(selectedElements);
				
				/*for(int i=0;i<selectedElements.size();i++) {
					System.out.println(selectedElements.get(i));
				}*/
				Iterator iterator = selectedElements.iterator();
				while(iterator.hasNext()) {
					System.out.println((String)iterator.next());
				}
			}
		});

		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
}
 

alex54007

Grünschnabel
Hallo,

ich habe auch ein Problem. Ich habe eine group mit einem Button Details einblenden. Ich möchte, dass beim Klicken auf dieses Button die group neu gerendert wird. Somit soll die group größer werden, Button Details einblenden mache ich unsichtbar und zeige den Button Details ausblenden. Beim Klicken auf diesen Button soll die group wieder kleiner werden, also auch neu gerendert werden.

Warte auf eure Antworten. Danke!