SWT Progressbar mit Textoverlay?

Bernd Hohmann

Top Contributor
Ich hab mir jetzt einen Wolf gesucht und nichts brauchbares gefunden: Ist es möglich, in SWT einen Progressbar mit einem Textoverlay zu versehen?

Hab mich mal mit einem NullLayout versucht und beide Komponenten übereinander geklatscht. Alle SWT.TRANSPARENT flags nützen nix, entweder nur der Progressbar oder nur das Label.

Bernd
Java:
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;

public class SWTApplication {

	protected Shell shell;
	protected ProgressBar pb;
	protected Label lbl;

	public static void main(String[] args) {
		try {
			SWTApplication window = new SWTApplication();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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

	protected void createContents() {
		shell = new Shell();
		shell.setSize(415, 294);
		shell.setLayout(null);
		// ###
		pb = new ProgressBar(shell, SWT.NONE);
		pb.setBounds(10, 10, 387, 20);
		// ###
		lbl = new Label(shell, SWT.TRANSPARENT);
		lbl.setBounds(10, 10, 387, 20);
		lbl.setText("Test");

		//
		pb.setVisible(true);
		pb.setMinimum(0);
		pb.setMaximum(100);
		pb.setSelection(75);
	}
}
 
J

JohannisderKaeufer

Gast
Eine kurze Suche ergab folgenden Treffer:

Count Numbers : ProgressBarSWT JFace EclipseJava

Zusammengefaßt wird, der Progressbar mit addPaintListener ein PaintListener übergeben.

Der Paintlistener hat nur eine Methode und bekommt den PaintEvent, mit dem wiederum über den Graphics Context ein String über die Progressbar gezeichnet werden kann.

In verlinktem Beispiel wird die Prozentzahl ausgegeben. Das Codesnippet sollte ausreichende Dokumentation bieten.

Ich muß allerdings gestehen, daß ich das momentan nicht ausprobiert habe.
Ein Feedbeck ob es funktioniert, wäre sehr nett.
 

Bernd Hohmann

Top Contributor
Ich habs mal für mich umgebaut. Ursprünglich war "MessageWidget" nur eine Statuszeile, dann kam rechts ein Progressbar dazu. Weil das Ganze zu viel Platz verschwendet (insbesondere wenn der Progressbar nicht gebraucht wurde) bin ich auf die Idee mit dem Textoverlay gekommen.

Die Klasse sollte mit jedem GUI Designer klarkommen.

Java:
package de.zwanzigeins.tagtaggo.widgets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

/**
 * Messagearea with Progressbar and Text as overlay.
 * 
 * 28.11.2012 ho: message over progressbar
 * 05.09.2012 ho: creation (hohmann@harddiskcafe.de)
 */

public class MessageWidget extends Composite {

	private ProgressBar pbMsg = null;
	private String strMessage = null;
	private Display display = null;
	private int intOldLwb = -1;
	private int intOldUpb = -1;
	private int intOldPos = -1;

	public MessageWidget(Composite parent, int style) {
		super(parent, style);
		display = parent.getDisplay();
		setLayout(new FillLayout(SWT.HORIZONTAL));
		//
		pbMsg = new ProgressBar(this, SWT.NONE);
		pbMsg.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				if (strMessage == null || strMessage.length() == 0) return;
				e.gc.setFont(display.getSystemFont());
				e.gc.setForeground(getForeground()); // set text color to widget foreground color

				Rectangle rec = pbMsg.getBounds();
				e.gc.drawString(strMessage, rec.x + 5, (rec.height - e.gc.getFontMetrics().getHeight()) / 2, true);
			}
		});
	}

	@Override
	public void setBackground(Color c) {
		super.setBackground(c);
		pbMsg.setBackground(c);
	}

	/**
	 * Sets the new message
	 */
	public void setMessage(String strMessage) {
		setMessage(strMessage, 0, 0, 0);
	}

	/**
	 * Sets the new message and updates the progressbar.
	 */
	public void setMessage(String strMessage, int lwb, int pos, int upb) {
		this.strMessage = strMessage;
		if (lwb != intOldLwb) {
			pbMsg.setMinimum(lwb);
			intOldLwb = lwb;
		}
		if (upb != intOldUpb) {
			pbMsg.setMaximum(upb);
			intOldUpb = upb;
		}
		if (pos != intOldPos) {
			pbMsg.setSelection(pos);
			intOldPos = pos;
		}
		while (display.readAndDispatch()) {}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX ProgressBar AWT, Swing, JavaFX & SWT 10
T Starten des Programms mit dem Progressbar AWT, Swing, JavaFX & SWT 2
L Progressbar Laufzeitveränderung AWT, Swing, JavaFX & SWT 4
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
B JavaFX Textfields: Fortschritt als ProgressBar und Progressindicator AWT, Swing, JavaFX & SWT 5
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z ProgressBar in Eclipse mit Wizard page? AWT, Swing, JavaFX & SWT 1
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
P Swing Die ProgressBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
T Prozessstatus in Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Swing Progressbar aktualisiert sich nicht AWT, Swing, JavaFX & SWT 17
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
V Swing Progressbar Problem AWT, Swing, JavaFX & SWT 14
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
Tobse LookAndFeel [Windows7] Nativ aussehnde ProgressBar AWT, Swing, JavaFX & SWT 13
J Progressbar mit einfacher Funktion AWT, Swing, JavaFX & SWT 6
D Progressbar AWT, Swing, JavaFX & SWT 5
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
S Upload Progressbar AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
S Swing ProgressBar AWT, Swing, JavaFX & SWT 3
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
D SWT JFace Wizard Progressbar AWT, Swing, JavaFX & SWT 4
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
ModellbahnerTT Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
P Progressbar in java AWT, Swing, JavaFX & SWT 3
K Frage zu ProgressBar, SwingWorker etc. AWT, Swing, JavaFX & SWT 4
V ProgressBar AWT, Swing, JavaFX & SWT 5
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
P JTable sortiert ProgressBar nicht AWT, Swing, JavaFX & SWT 8
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
M Bild laden + ProgressBar AWT, Swing, JavaFX & SWT 2
C Problem mit ProgressBar AWT, Swing, JavaFX & SWT 4
thE_29 Problem mit ProgressBar AWT, Swing, JavaFX & SWT 2
M ProgressBar in einem Thread? AWT, Swing, JavaFX & SWT 4
C ProgressBar AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben