Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在文本组件上绘制轮廓边框_Java_Swt - Fatal编程技术网

Java 在文本组件上绘制轮廓边框

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) {

我试图在SWT中的
文本上画一个边框…
这就是我现在得到的:

公共类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吗?您是否尝试过将文本小部件包装在合成中?您可以在合成中绘制边框。