Java (SWT) MessageBox - braucht Konstruktor?

trauergraf

Cadet 3rd Year
Registriert
Dez. 2014
Beiträge
50
Hi, bin Anfänger und muss mich grad ein wenig in GUI Programmierung einarbeiten. Komme ganz gut voran und hab auch erfolgreich die erste Adapterklasse geschrieben und dem ganzen Funktionalität verliehen. Nun gibt mein Programm aber momentan nur über die Konsole die Meldungen aus, was sich jetzt ändern soll. Ich möchte dass die Ausgabe über eine MessageBox ausgegeben wird. In Musterlösungen stellte ich fest, dass die als Objekt erzeugt werden muss, allerdings nutzen die jeweils nie einen Konstruktor... Beim Erzeugen meiner Messagebox spuckt mir Eclipse aber "undefined constructor" aus. Habe versucht einen Konstruktor manuell zu schreiben, aber auch das hat irgendwie nicht geklappt. Kann mir jemand weiter helfen?

(Zeile 87 ist die Zeile mit Fehler)








Zur Funktionalität: Das Fenster hat eine Texteingabe, diese Texteingabe soll auf folgende Kriterien geprüft werden:
- .de am Ende
- "http (..)" oder "https://www." am Anfang
- Kein Leerzeichen


Hauptfenster:
Code:
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;


public class PruefFenster {

	protected Shell shell;
	private Text text;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			PruefFenster window = new PruefFenster();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(440, 160);
		shell.setText("SWT Application");
		shell.setLayout(new GridLayout(2, false));
		
		Label lblInternetadresse = new Label(shell, SWT.NONE);
		lblInternetadresse.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblInternetadresse.setText("Internetadresse:");
		
		text = new Text(shell, SWT.BORDER);
		GridData gd_text = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
		gd_text.widthHint = 267;
		text.setLayoutData(gd_text);
		new Label(shell, SWT.NONE);
		new Label(shell, SWT.NONE);
		
		Button btnAdressePrfen = new Button(shell, SWT.NONE);
		btnAdressePrfen.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				// HIER METHODE NOCHMAL ÜBERGEBEN!?!??!
				adPruefen();
			}
		});
		GridData gd_btnAdressePrfen = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);
		gd_btnAdressePrfen.widthHint = 110;
		btnAdressePrfen.setLayoutData(gd_btnAdressePrfen);
		btnAdressePrfen.setText("Adresse pr\u00FCfen");
		new Label(shell, SWT.NONE);
		new Label(shell, SWT.NONE);

	}


		public void adPruefen(){
			String ad = text.getText();
			MessageBox b = new MessageBox(this, SWT.OK);
			
			
			
			if(ad.endsWith(".de")){
				System.out.println(".de-Prüfung OK!");}
			else {
				System.out.println(".de-Prüfung nicht OK!");
			}
			if(ad.startsWith("http://www.")||ad.startsWith("https://www.")){
				System.out.println("www.-Prüfung OK!");
			}else{
				System.out.println("www.-Prüfung nicht OK!");
			}
			if(ad.contains(" ")){
				System.out.println("Leerzeichen Prüfung nicht OK!");
				
			}else{System.out.println("Kein Leerzeichen- Prüfung OK!");}
			
			
					
				}			
			
		}
		   // // this ist das aktuelle Fenster, da Klasse von Shell erbt
	        //b.setText("Ergebnis der Prüfung");
	        //if (quersumme == 20) {
	        //    b.setMessage("Eingabe ist gültig");
	        //} else {
	        //    b.setMessage("Eingabe ungültig");
	        //}
	        //b.open();



AdapterKlasse:
Code:
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;


public class PruefAdapter extends SelectionAdapter {
	
	private PruefFenster fenster;

	@Override
	
	//Widget Methode
	public void widgetSelected(SelectionEvent e) {
		fenster.adPruefen();
		super.widgetSelected(e);
	}

	// KONSTRUKTOR
	public PruefAdapter(PruefFenster fenster) {
		super();
		this.fenster = fenster;
	}
	
	
	
	

}
 
Zuletzt bearbeitet:
JiJiB! schrieb:
Du verwendest im Konstruktor von MessageBox ein this - was sich damit auf die Klasse PruefFenster bezieht. Laut MessageBox Docu muss allerdings Shell reingereicht werden. Das sollte schon reichen.

Sorry total vergessen zu erwähnen. Habe es davor so gehabt:

Code:
MessageBox b = new MessageBox(Shell, SWT.OK);

Geht aber leider auch nicht. "Shell cannot be resolved to a variable" :/ "this" war dann nur ein hilfloser Versuch..^^


// Hier kann geschlossen werden, danke für die rasche Antwort. Bin auf die Lösung gekommen. Shell musste klein geschrieben werden... manchmal sind Fehler an denen man eine Stunde hockt schon wirklich peinlich... >.<
 
Zuletzt bearbeitet:
Wollte grad sagen, Du musst Shell schon instanziieren und da Du das in Deinem Code in Zeile 51 auch tust, musst Du den Variablennamen notwendigerweise kleinschreiben ^^

Dass man stundenlang an Popelfehlern sitzt, wird übrigens noch öfter passieren. Das ist ein notwendiges Übel an der Programmierung ;)
 
Zuletzt bearbeitet:
Shame on me :)
Jetzt ist mir grade aufgefallen, dass meine Prüfung immer nur die dritte Prüfung durchführt (auf Leerzeichen), die anderen Messageboxen werden gar nicht erst angesprochen.. Hab ich falsch verzweigt?
 
Zurück
Oben