2012-07-17 52 views
3

我嘗試過在SWT一個Text繪製邊框...
這就是我現在:借鑑文本組件外框

公共類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

我錯過了什麼?

編輯
我放棄了TextStyledText

公共類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. 你可以創建一個新的文本小部件SWT.BORDER作爲風格參數。這會給你一個漂亮的邊框。

  2. 您可以使用StyledText小部件。 StyledText小部件使您可以定義邊距。

+0

當我使用SWT.BORDER我不能得出我自己的邊界,我不希望使用StyledText – 2012-07-17 12:59:05

+0

那麼有什麼理由不使用StyledText? – 2012-07-17 13:04:05

+0

您是否嘗試在複合材料中包裝文本小部件?你可以在Composite上繪製你的邊框。 – 2012-07-17 13:11:00