3

TextSWTで境界線を描画しようとしています...
これが今のところ取得したものです。

public class BorderedText extends 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() {
    //
}
4

1 に答える 1

4

2つの可能性があります。

  1. SWT.BORDERをスタイル引数として使用して、新しいテキストウィジェットを作成できます。これはあなたに見栄えの良い境界線を与えるでしょう。

  2. StyledTextウィジェットを使用できます。StyledTextウィジェットを使用すると、マージンを定義できます。

于 2012-07-17T12:57:18.507 に答える