Button array

2fast4you87

Erfahrenes Mitglied
Hallo Leute,

Nachdem ich mich seit längeren mit C++ / MFC beschäftigt habe, wollte ich mich auch nun um Java / SWT kümmern. ich programmiere mit dem Editor Eclipse.
Als erstes Projekt habe ich mir einen Taschenrechner vorgenommen.
Nun zu meinem Problem.
Habe ein Button Array erstellelt und lasse dies in einer Methode erstellen, nur möchte ich die Buttons ja nicht nur anzeigen lassen, sondern auch auf sie drücken. Das Event dazu, laut tutorial, public void widgetSelect(SelectionEvent e).
Nur ich kann leider nicht bestimmen welcher Button gerade gedrückt wurde.


Könnt Ihr mir weiter helfen ?
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;


public class taschenrechner {
	
	private Display display;
	private Shell shell;
	private Button[] buttons;
	private Text text;
	private String [] zahlen = {"9","8","7","6","5","4","3","2","1","0"};
	private int index;
	
	taschenrechner() {
		display = new Display();
		shell = new Shell(display);
		shell.setSize(200,250);
		index = 10;
		
		init_layout();
		set_layout();
		
		shell.open();
		while(!shell.isDisposed()) {
			if(!display.readAndDispatch())
				display.sleep();
		}
	}
	
	public void init_layout() {
		text = new Text(shell,SWT.BORDER);
		buttons = new Button[index];
		for(int i = 0;i < 10;i++){
			buttons[i] = new Button(shell,SWT.PUSH);
			// Ereignisse bei Button druck
				buttons[i].addSelectionListener(new SelectionAdapter() {
					public void moep(SelectionEvent e) {
								text.setText("123");	// woher weiß ich welcher Button gedrückt wurde ?		
					}
				});
			// Ende
		}
	}
	


	public void set_layout() {
		int x = 20;
		int y = 40;
		
		
		for(int i = 0;i < 10;i++) {	//platziere Buttons
			buttons[i].setText(zahlen[i]);
			buttons[i].setSize(30,20);
			buttons[i].setLocation((x+=30), y);
			if((i+1) % 3 == 0) {
				y+=20;
				x = 20;
			}
		} // ende
		
		text.setBounds(45, 10, 100, 20);	//setze Display
		
	}
	
	public static void main(String[] args) {
		new taschenrechner();
	}

}
 
SWT Widgets haben alle eine Methode setData(key, value) und getData(key).

Du könntest so z.B. mit
Code:
button[i].setData("ButtonNumber",i)
hinterlegen um welchen Button es sich handelt und im widgetSelected auf dem
Code:
Event.widget.getData("ButtonNumber")
wieder abrufen.
 
Hallo,

Habe das SetData eingebaut nur leider habe ich dabei ein Problem.

Code:
for(int i = 0;i < index;i++){
 buttons[i] = new Button(shell,SWT.PUSH);
 buttons[i].setData(zahlen[i],((index-1)-i));
}
// zahlen[i] ist ein Array (String) mit dem Zahlen von 0 bis 9

Wenn ich den Button 0 Drücke dann funktioniert das auch nur wenn ich einen anderen drücke, bricht er das Programm ab und sagt mir :
Exception in thread "main" java.lang.NullPointerException

Code:
public void widgetSelected(SelectionEvent e) {
 if(!e.widget.getData("0").equals("null")) {
  text.setText("0");
 }
}

Woran liegt das ?
Und wie kann ich es beheben ?
 
Du hast absolut nicht verstanden was ich meinte....

Der Key von setData sollte immer der selbe sein, nur am Value unterscheiden sie sich.

Guck nochmal oben nach, den String "ButtonNumber" da solltest du nicht ersetzen!

Vergleiche auf null macht man übrigens mit != null und nicht mit equals. null ist doch kein String..... Solltest vielleicht erstmal noch grundlegende Java Sachen lesen bevor du anfängst damit zu programmieren.
 
Zurück