Adressleiste zum Browserfenster hinzufügen?

Extremefall

Bekanntes Mitglied
Hallo,
ich habe es mittels Java geschafft, ein Browserfenster zu erzeugen. Hier ist mein kompletter Code:
Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Filter {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);

    
    final Browser browser = new Browser(shell, SWT.NONE);
    browser.setBounds(5,5,600,600);


    browser.addLocationListener(new LocationListener() {
      public void changed(LocationEvent event) {
    	 
      }
      public void changing(LocationEvent event) {
    	  String locationname = "";
    	  if (event.location != locationname){
              
    	  }
      }
    });

    
    browser.setUrl("http://java2s.com");    
    shell.open();

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

Nun suche ich nach einer Möglichkeit, über eine Usereingabe über ein Textfeld einen Link einzufügen und darüber dann die nächste Seite anzusteuern. Also die Umsetzung der Adresszeile einer Website. Nun weiß ich allerdings nicht, wie ich die Adresszeile dort hinzufügen kann, da ich bisher nur mit JFrames etc. gearbeitet habe. Könntet ihr mir da helfen? Wie kann ich das ganze lösen?
 
Platziere ein Textfeld und setze einen Listener darauf, dass bei Enter die eingegeben Seite angesteuert werden soll (oder per klick auf einen Button)
 
Und wie platziere ich ein Textfeld? Das ist ja das Problem. Geht es wie mit AWT mit add? Ich kenne mich damit leider überhaupt nicht aus. Wie füge ich ein Feld oben ein?
 
Wahrscheinlich so ähnlich wie du dein Browser gesetzt hast. Schon lange nix mehr mit SWT gemacht, ka. Im Internet findet sich aber garantiert en haufen zu SWT und dessen LayoutManagern.
 
Es ginge zum Beispiel so:
Java:
package swt;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class AdressLineBrowser {

	private Composite composite;
	private Text tfUrl;
	private Button btnGo;
	private Browser browser;

	public AdressLineBrowser(Composite parent, int style) {
		this.composite = new Composite(parent, style);

		GridLayout layout = new GridLayout(2, false);
		composite.setLayout(layout);

		GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
		tfUrl = new Text(composite, SWT.BORDER);
		tfUrl.setLayoutData(layoutData);
		tfUrl.addKeyListener(new KeyAdapter() {

			@Override
			public void keyReleased(KeyEvent event) {
				if (event.keyCode == SWT.CR || event.keyCode == SWT.KEYPAD_CR) {
					if (!tfUrl.getText().isEmpty()) {
						browser.setUrl(tfUrl.getText());
					}
				}
			}});

		layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
		btnGo = new Button(composite, SWT.PUSH);
		btnGo.setLayoutData(layoutData);
		btnGo.setText("Go");
		btnGo.addSelectionListener(new SelectionAdapter() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				if (!tfUrl.getText().isEmpty()) {
					browser.setUrl(tfUrl.getText());
				}
			}});

		layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
		browser = new Browser(composite, SWT.BORDER);
		browser.setLayoutData(layoutData);

		browser.addLocationListener(new LocationListener() {

			public void changed(LocationEvent event) {}

			public void changing(LocationEvent event) {
				tfUrl.setText(event.location);
			}
		});

		composite.pack();
		browser.forceFocus();
	}

	public void setUrl(String url) {
		tfUrl.setText(url);
		browser.setUrl(url);
	}

	public String getUrl() {
		return browser.getUrl();
	}

	public void addLocationListener(LocationListener listener) {
		browser.addLocationListener(listener);
	}

	public void removeLocationListener(LocationListener listener) {
		browser.removeLocationListener(listener);
	}

	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new FillLayout());

		AdressLineBrowser browser = new AdressLineBrowser(shell, SWT.NONE);
		browser.setUrl("http://www.java-forum.org");
		// Hier eigene LocationListener einbringen, sofern nötig.

		shell.setSize(1100, 800);
		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}
}
Wenn du genaueres dazu wissen willst, wie man mit SWT umgeht, dann solltest du entsprechendes Lehrmaterial studieren, z. B. die entsprechenden Abschnitte des RCP-Buchs.
 

Zurück
Oben