Dieser Artikel zeigt wie eine Statusleiste(im folgenden Text auch Statusline genannt) aktiviert werden kann und wie einige Widgets zu dieser hinzugefügt werden können.
Problemstellung:
In der Statusleiste einer Eclipse RCP Anwendung soll eine Textbox mit einer Schaltfläche (Button) erscheinen. Beim Klick auf die Schalfläche soll der Text aus der Textbox in der view erscheinen.
Lösung
Es gibt zwei wichtige Schritte die beachtet werden müssen, um eine Statusleiste zu erzeugen. Erstens muss in der Klasse, die vom
WorkbenchWindowAdvisor
erbt (in unserem Beispiel ist es die Klasse ApplicationWorkbenchWindowAdvisor
) in der Methode preWindowOpen
die Anzeige der Statusline aktiviert werden. Zweitens muss die Methode fillStatusLine
in er Klasse ApplicationActionBarAdvisor
überschrieben werden um dort eine ControlContribution
einzufügen, die den Ihnalt der Statusleiste repräsentiert. Alle nötigen Schritte werden unten genauer beschrieben.
Schritt 1
Erzeuge eine RCP Application aus dem Template RCP Eclipse Application with a view mit dem Namen
com.blogspot.javadingsda.statusline
.
Schritt 2
Erzeuge die Klasse
StatusLineTextBox
. Diese repräsentiert die Statuszeile.
package com.blogspot.javadingsda.statusline;
import org.eclipse.jface.action.ControlContribution;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
public class StatusLineTextBox extends ControlContribution {
Text textBox;
private View view;
public StatusLineTextBox(String str) {
super(str);
}
@Override
protected Control createControl(Composite parent) {
textBox = new Text(parent, SWT.BORDER );
textBox.setText("hier was eingeben!");
Button button = new Button(parent, SWT.NONE);
button.setText("Text oben ausgeben");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
view.setText(textBox.getText());
view.update();
}
});
return textBox;
}
public void addView(View view) {
this.view = view;
}
}
Schritt 3
Füge zur Klasse
ApplicationActionBarAdvisor
die Methode fillStatusLine
hinzu. Die Klasse sollte wie folgt aussehen:
package com.blogspot.javadingsda.statusline;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
public static StatusLineTextBox textBox = new StatusLineTextBox("MyBox");
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
@Override
protected void fillStatusLine(IStatusLineManager statusLine) {
super.fillStatusLine(statusLine);
statusLine.add(textBox);
}
}
Schritt 4
package com.blogspot.javadingsda.statusline;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(
IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(true); // auf true setzen
configurer.setTitle("RCP Application");
}
}
Schritt 5
Anschließend muss nur noch die
View
modifiziert werden.
package com.blogspot.javadingsda.statusline;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;
public class View extends ViewPart {
public static final String ID = "com.blogspot.javadingsda.statusline.view";
private String text = "Testmich!";
private Label l1;
public void createPartControl(Composite parent) {
ApplicationActionBarAdvisor.textBox.addView(this);
l1 = new Label(parent, SWT.NONE);
l1.setText(text);
}
public void setFocus() {}
public void setText(String text) {
this.text = text;
}
public void update() {
l1.setText(text);
}
}
Anwendung ausführen. Fertig!
Dieser Artikel basiert auf den folgenden Quellen: www.java-tips.org und www.saxonysoft.de