SWT Composite Focus

lumo

Top Contributor
Hallo,

ich hab ein control, das ein Composite extended.
ich habe einen paintlistener drauf um die komponente zu zeichnen.
und einen focuslistener um die komponente neu zu zeichnen (redraw())

warum bekomm ich keinen focus (ich bilde mir ein ich hätte es bei einer anderen komponente gleich gemacht, bei der es jetzt funktioniert...

Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;

public class MyButton extends Composite implements TraverseListener,
		FocusListener, PaintListener {

	private String text = "isFocusControl = ";

	/**
	 * Create the dialog.
	 * 
	 * @param parent
	 * @param style
	 */
	public MyButton(Shell parent, int style) {
		super(parent, style | SWT.DOUBLE_BUFFERED);
		addPaintListener(this);
		addFocusListener(this);
		addTraverseListener(this);
	}

	@Override
	public void paintControl(PaintEvent e) {
		if (isFocusControl()) {
			e.gc.setBackground(ColorCache.getTransparent());
		} else {
			e.gc.setBackground(ColorCache.getWhite());
		}
		e.gc.fillRectangle(getClientArea());
		e.gc.drawText(text + isFocusControl(), 0, 0);
	}

	@Override
	public void focusGained(FocusEvent e) {
		redraw();
	}

	@Override
	public void focusLost(FocusEvent e) {
		redraw();
	}

	public void setText(String string) {
		this.text = string;
	}

	@Override
	public void keyTraversed(TraverseEvent e) {
		if (e.detail == SWT.TRAVERSE_TAB_NEXT
				|| e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
			e.doit = true;
		}
	}
}
bitte auf meinen fehler hinschupsen!
danke!

PS: ich hab schon gegooglet, und gesucht... aber noch keine richtige lösung gefunden
UPDATE: wenn ich nen keylistener hinzufüge, bekomme ich den focus, aber mit tab wieder raus geht nicht...
 

lumo

Top Contributor
lösung:
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;

class MyControl extends Composite {

	String string = "";

	public MyControl(Composite parent, int style) {
		super(parent, style);
		addKeyListener(new KeyListener() {

			@Override
			public void keyReleased(KeyEvent e) {
				e.doit = true;
			}

			@Override
			public void keyPressed(KeyEvent e) {
				if (e.character == ' ' || e.character == SWT.CR) {
					notifyListeners(SWT.Selection, null);
				} else {
					e.doit = true;
				}
			}
		});
		addTraverseListener(new TraverseListener() {

			@Override
			public void keyTraversed(TraverseEvent e) {
				if (e.detail == SWT.TRAVERSE_TAB_NEXT
						|| e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
					e.doit = true;
				}

			}
		});
		addPaintListener(new PaintListener() {

			@Override
			public void paintControl(PaintEvent e) {
				System.out.println("redrawing!");
				Rectangle rect = getClientArea();
				Point extent = e.gc.textExtent(string);
				int x = (rect.width - extent.x) / 2;
				int y = (rect.height - extent.y) / 2;
				if (isFocusControl()) {
					e.gc.setBackground(ColorCache.getWhite());
					e.gc.setForeground(ColorCache.getBlack());
					e.gc.drawText(string, x, y);
					x -= 2;
					y -= 2;
					extent.x += 3;
					extent.y += 3;
					e.gc.drawFocus(x, y, extent.x, extent.y);
				} else {
					e.gc.setBackground(ColorCache.getBlack());
					e.gc.setForeground(ColorCache.getWhite());
					e.gc.drawText(string, x, y);
				}
				System.out.println("paintControl.isFocusConrol "
						+ isFocusControl());
			}
		});
		addFocusListener(new FocusListener() {

			@Override
			public void focusLost(FocusEvent e) {
				System.out.println("focus lost: " + isFocusControl());
				redraw();
			}

			@Override
			public void focusGained(FocusEvent e) {
				System.out.println("focus gained: " + isFocusControl());
				redraw();
			}
		});
	}

	public void setText(String string) {
		checkWidget();
		this.string = string == null ? "" : string;
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
G SWT JAVA Swt Composite übereinanderlegen AWT, Swing, JavaFX & SWT 6
A SWT MouseWheelListener auf Composite beschränken? AWT, Swing, JavaFX & SWT 10
S SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row AWT, Swing, JavaFX & SWT 5
reibi SWT Bild auf Composite zentrieren AWT, Swing, JavaFX & SWT 7
D SWING - Ein Composite scrollen AWT, Swing, JavaFX & SWT 6
lumo SWT Composite Mouse Track Lisetner AWT, Swing, JavaFX & SWT 2
A SWT Scrollable Composite innerhalb eines Composites AWT, Swing, JavaFX & SWT 3
J SWT Größe eines Composite mit Gridlayout festlegen AWT, Swing, JavaFX & SWT 2
G SWT Button in Composite vor anderem Button einfügen AWT, Swing, JavaFX & SWT 10
A SWT Auf einem Tabb (FormPage) einzelnes Composite neu zeichnen AWT, Swing, JavaFX & SWT 7
A SWT SWT - Unbekannte Fläche (Objekt) erscheint im Composite AWT, Swing, JavaFX & SWT 6
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
J SWT 4 Objekte auf einem Composite anordnen AWT, Swing, JavaFX & SWT 5
S SWT Composite mit Layout Manager geht nicht AWT, Swing, JavaFX & SWT 4
L SWT Composite klonen AWT, Swing, JavaFX & SWT 2
lumo SWT Absolute position einer Composite/Control AWT, Swing, JavaFX & SWT 5
B SWT Composite neu zeichnen AWT, Swing, JavaFX & SWT 3
M Shell vs. Composite AWT, Swing, JavaFX & SWT 3
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
A SWT Composite bleibt leer AWT, Swing, JavaFX & SWT 7
K Composite Inhalt wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
G Composite - Rand wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 3
7 SWT-Composite für Wizard, Event finden? AWT, Swing, JavaFX & SWT 5
der JoJo [SWT]Meherer Composite's , immer nur eins anzeigen AWT, Swing, JavaFX & SWT 2
T FillLayout und Composite AWT, Swing, JavaFX & SWT 10
C SWT Composite Border im Nachhinein setzen AWT, Swing, JavaFX & SWT 1
I Composite AWT, Swing, JavaFX & SWT 5
E Focus auf titledborder AWT, Swing, JavaFX & SWT 8
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
B Swing JTextfeld bekommt nur jedes Zweite mal Focus AWT, Swing, JavaFX & SWT 11
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
D ComboBoxCellEditor Refresh beim Focus AWT, Swing, JavaFX & SWT 4
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Focus Problem AWT, Swing, JavaFX & SWT 4
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
M focus subFrame AWT, Swing, JavaFX & SWT 3
G Force Focus für JButton AWT, Swing, JavaFX & SWT 2
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Swing Focus Management AWT, Swing, JavaFX & SWT 3
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
H Swing Focus bekommen AWT, Swing, JavaFX & SWT 4
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
L AWT Focus auf Fenster setzen AWT, Swing, JavaFX & SWT 4
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
L Swing Input Focus eines JTextFields in einer JList AWT, Swing, JavaFX & SWT 2
A Focus in JTable Cell AWT, Swing, JavaFX & SWT 3
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
R Focus ermitteln AWT, Swing, JavaFX & SWT 2
C JTable Focus Handling AWT, Swing, JavaFX & SWT 2
Nitram Swing Focus im JFrame AWT, Swing, JavaFX & SWT 10
I Swing Focus Listener bei PComboBox von pswing Erweiterung AWT, Swing, JavaFX & SWT 7
V Swing Problem mit Focus setzen AWT, Swing, JavaFX & SWT 7
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
B JTable getselectedrow liefert -1 wenn Focus verloren AWT, Swing, JavaFX & SWT 4
S Versuch den Focus zu klauen detektieren? AWT, Swing, JavaFX & SWT 14
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
O Focus im GBL steuern. AWT, Swing, JavaFX & SWT 3
K Focus an das JPanel übergeben AWT, Swing, JavaFX & SWT 2
K Focus-Problem AWT, Swing, JavaFX & SWT 9
O TextBoxen Focus über Pfeiltasten steuern AWT, Swing, JavaFX & SWT 3
G Problene mt Focus unter Swing AWT, Swing, JavaFX & SWT 7
G JTable und Focus AWT, Swing, JavaFX & SWT 30
D Beim Starten ein JTextfield Focus geben AWT, Swing, JavaFX & SWT 7
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
F Problem mit Actions, TextComponents und Focus AWT, Swing, JavaFX & SWT 2
K Focus mit Mouseclick auf JPanel setzen AWT, Swing, JavaFX & SWT 4
D Focus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
B JTable - Focus - TabTaste AWT, Swing, JavaFX & SWT 2
D Focus in bestimmter Celle in JTable AWT, Swing, JavaFX & SWT 3
B Komponente in JTable bekommt keinen Focus AWT, Swing, JavaFX & SWT 3
M Focus beim öffnen eines neuen JFrames AWT, Swing, JavaFX & SWT 6
O JTextField- Selection / Focus bei nicht editierbaren Feldern AWT, Swing, JavaFX & SWT 2
J Focus auf JFrame AWT, Swing, JavaFX & SWT 3
B Focus für Textfeld AWT, Swing, JavaFX & SWT 5
B im JTree Focus setzen und navigieren AWT, Swing, JavaFX & SWT 3
B JInternalFrame in den Vordergrund rücken + Focus AWT, Swing, JavaFX & SWT 15
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
L Focus setzen AWT, Swing, JavaFX & SWT 3
G JTabbedPane, Focus, ChangeListener AWT, Swing, JavaFX & SWT 1
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
J Focus-Problem bei Vollbildmodus AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben