Donnerstag, 29. März 2012

Eclipse RCP - Widgets in der Statusleiste (StatusLine/Statusbar)

Eclipse Version 3.7

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

Keine Kommentare:

Kommentar veröffentlichen