2012-11-27 24 views

回答

1

如果您想更改提示的颜色,只需在焦点事件中添加Listener即可。

public class StackOverflow 
{ 
    public static void main(String[] args) 
    { 
     final Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setText("StackOverflow"); 
     shell.setLayout(new GridLayout(1, true)); 

     final Text text = new Text(shell, SWT.BORDER | SWT.SEARCH); 
     text.setForeground(display.getSystemColor(SWT.COLOR_RED)); 
     text.setText("Enter something"); 
     text.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, true)); 

     text.addListener(SWT.FocusOut, new Listener() 
     { 
      @Override 
      public void handleEvent(Event arg0) 
      { 
       if("".equals(text.getText())) 
       { 
        text.setForeground(display.getSystemColor(SWT.COLOR_RED)); 
        text.setText("Enter something"); 
       } 
      } 
     }); 

     text.addListener(SWT.FocusIn, new Listener() 
     { 
      @Override 
      public void handleEvent(Event arg0) 
      { 

       if("Enter something".equals(text.getText())) 
       { 
        text.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); 
        text.setText(""); 
       } 
      } 
     }); 

     Label label = new Label(shell, SWT.NONE); 
     label.setFocus(); 
     label.forceFocus(); 

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

不聚焦/空:

enter image description here

重点的/不为空:

enter image description here

正如你所看到的, “提示” 现在是红色的。

+0

我想添加提示: text.setMessage(“Enter something”); 在您的实施中: 1.如果我尝试阅读空白文本的内容,我将得到“输入内容” 2.我不想清除FocusIn上的字段。使用Tab键切换表格将清除所有字段。 – KrzyH

+0

@KrzyH我不明白。您使用'setMessage()'设置的文本将只在文本字段为空时显示,不是吗?然后我看不到清除它的问题。我改变了'FocusIn',这样它只会清除该字段,如果它包含一些与提示不同的文本。 – Baz

+0

使用setMessage()设置的文本仅在文本字段为空时才可见。但我想更改默认消息/提示文本颜色。 – KrzyH