gpt4 book ai didi

java - 在 Text 组件上绘制轮廓边框

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:40 25 4
gpt4 key购买 nike

我正在尝试在 SWT 中的 Text 上绘制边框...
这是我现在得到的:

公共(public)类 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);
}
}
});

当组件获得焦点时,他是这样的 enter image description here

但是当我打字的时候,他搞砸了 enter image description here

我错过了什么?

编辑
我放弃了 Text 并用 StyledText

完成了

公共(public)类 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 作为样式参数创建一个新的文本小部件。这会给你一个漂亮的边框。

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

关于java - 在 Text 组件上绘制轮廓边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com