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...
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...
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;
}
}
}
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...