Zeichnen Sie einen Rahmen für die Textkomponente
Ich versuche, eine Grenze über a zu ziehenText
in SWT ...
Das habe ich jetzt:
public class BorderedText erweitert Text {
public BorderedText(Composite parent, int style) {
super(parent, style);
addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.setAntialias(SWT.ON);
if (isFocusControl()) {
Color color = new Color(getDisplay(), new RGB(82, 168, 236));
e.gc.setAlpha(200);
e.gc.setForeground(color);
Rectangle rect = new Rectangle(0,0, getClientArea().width-1, getClientArea().height-1);
Transform t = new Transform(getDisplay());
e.gc.setTransform(t);
e.gc.drawRoundRectangle(0, 0, rect.width, rect.height, 4,4);
} else {
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
Rectangle rect = new Rectangle(0,0, getClientArea().width-1, getClientArea().height-1);
e.gc.drawRectangle(rect);
}
}
});
Wenn die Komponente den Fokus erhält, ist er so
Aber wenn ich etwas tippe, ist er durcheinander geraten
Was vermisse ich?
BEARBEITEN
Ich habe aufgegebenText
und fertig mitStyledText
public class BorderedText erweitert StyledText {
public BorderedText(Composite parent) {
super(parent, SWT.WRAP);
setTabStops(new int[] {0});
addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.setAntialias(SWT.ON);
if(isFocusControl()){
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_LIST_SELECTION));
e.gc.drawRoundRectangle(0, 0, getClientArea().width-1, getClientArea().height-1, 6,6);
} else {
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
e.gc.drawRoundRectangle(0, 0, getClientArea().width-1, getClientArea().height-1, 6,6);
}
}
});
addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
redraw();
}
@Override
public void focusGained(FocusEvent e) {
redraw();
}
});
addControlListener(new ControlListener() {
@Override
public void controlResized(ControlEvent e) {
redraw();
}
@Override
public void controlMoved(ControlEvent e) {
redraw();
}
});
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.character == SWT.TAB){
e.doit = false;
traverse(SWT.TRAVERSE_TAB_NEXT);
}
}
});
}
@Override
protected void checkSubclass() {
//
}
@Override
protected void checkWidget() {
//
}