在Text组件上绘制轮廓边框

我正试图在SWT中的Text上绘制边框…
这就是我现在得到的:

公共类BorderedText扩展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); } } }); 

当组件获得焦点时,他就是这样 在此处输入图像描述

但是当我打字的时候,他搞砸了 在此处输入图像描述

我错过了什么?

编辑
我放弃了Text并用StyledText完成了它

公共类BorderedText扩展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() { // } 

你有两种可能性:

  1. 您可以使用SWT.BORDER创建一个新的Text小部件作为样式参数。 这会给你一个漂亮的边框。

  2. 您可以使用StyledText小部件。 StyledText小部件使您可以定义边距。