2014-02-20 179 views
1

我正在使用禁用的SWT文本字段(import org.eclipse.swt.widgets.Text),我基本上要設置文本顏色。Java在禁用SWT文本字段中設置文本顏色

我知道在JTextField你可以使用setDisabledTextColor(Color c)來設置禁用文本的顏色,但是有什麼用於swt widget文本?

任何幫助/建議非常感謝!

回答

2

禁用組件的顏色是受OS限制的那些顏色之一,所以在SWT中無法更改該顏色。

然而,您可以將Listener添加到SWT.Paint並自己繪製一些東西。


您可以使用此作爲起點:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 

    Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new FillLayout(SWT.VERTICAL)); 

    final Text normal = new Text(shell, SWT.BORDER); 
    final Text special = new Text(shell, SWT.BORDER); 
    special.addListener(SWT.KeyUp, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      normal.setText(special.getText()); 
      special.redraw(); 
     } 
    }); 

    special.addListener(SWT.Paint, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      if (!special.isEnabled()) 
      { 
       GC gc = e.gc; 

       String text = special.getText(); 
       Rectangle bounds = special.getBounds(); 

       gc.setBackground(display.getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND)); 
       gc.setForeground(display.getSystemColor(SWT.COLOR_TITLE_FOREGROUND)); 
       gc.fillRectangle(0, 0, bounds.width, bounds.height); 
       gc.drawText(text, 3, 2); 
      } 
     } 
    }); 

    normal.setEnabled(false); 

    Button switchButton = new Button(shell, SWT.PUSH); 
    switchButton.setText("(De)activate"); 
    switchButton.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      special.setEnabled(!special.getEnabled()); 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
} 

貌似這個(第一Text是默認的,第二Text是自定義一個:

enter image description here

+0

謝謝你你的幫助,我會在早上第一件事情,如果你能提供僞代碼/示例代碼,這將是一個很大的好處,我會接受你的nswer! –

相關問題