Java 在文本组件上绘制轮廓边框
我试图在SWT中的Java 在文本组件上绘制轮廓边框,java,swt,Java,Swt,我试图在SWT中的文本上画一个边框… 这就是我现在得到的: 公共类BorderedText扩展文本{ public BorderedText(Composite parent, int style) { super(parent, style); addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent e) {
文本上画一个边框…
这就是我现在得到的:
公共类BorderedText扩展文本{
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() {
//
}
你有两种可能:
您可以使用SWT.BORDER作为样式参数创建一个新的文本小部件。这将为您提供一个漂亮的边框
您可以使用StyledText小部件。StyledText小部件允许您定义页边距
当我使用SWT.BORDER时,我无法绘制自己的边框,也不想使用StyledTextWell。有什么理由不使用StyledText吗?您是否尝试过将文本小部件包装在合成中?您可以在合成中绘制边框。