2016-06-27 21 views
1

SWT TextにはsetMessageというメソッドがあり、これをSWT.SEARCHとともに使用して、テキストボックスに初期フェードアウトメッセージを配置することができます。SWT Comboの初期メッセージを設定する

SWT Comboで同様のことができますか?それはsetMessage()メソッドを持っていないようですので、ここでいくつかのトリックを適用する必要があります。

+0

BWT、 'これは、一般的にSWT.SEARCH''で使用されsetMessage'が、 'SWT.SINGLE'スタイルを持つすべてのテキストウィジェットのために働きます。 –

答えて

4

あなたが正しいです、コンボは、テキストウィジェットのようなメッセージを設定するための定期的なAPIを持っていません。

Comboテキストが空のときに、PaintListenerを使用してメッセージテキストを描画できます。

combo.addPaintListener(new PaintListener() { 
    @Override 
    public void paintControl(PaintEvent event) { 
    if(combo.getText().isEmpty()) { 
     int x = ...; // indent some pixels 
     int y = ...; // center vertically 
     event.gc.drawText("enter something", x, y); 
    } 
    } 
}); 

また、あなたはそのネイティブ外観が更新された後にコンボを再描画いくつかのリスナーが必要になります。

combo.addListener(SWT.Modify, event -> combo.redraw()); 

Aはリスナーを変更することは確かにメッセージを表示/非表示にする必要はなく、それが無効化されたときに、メッセージを再描画するために必要な、おそらくより多くのリスナーがありますされています。 How to display a hint message in an SWT StyledText

ただし、Canvas以外のコントロールへの描画はサポートされていないため、すべてのプラットフォームで機能しない可能性があります。

1

私の目的のために働くペイントリスナーのより簡単な代替方法は、プログラムでテキストとテキストの色をFocusListenerで設定することです。次に例を示します。

final String placeholder = "Placeholder"; 
    combo.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); 
    combo.setText(placeholder); 
    combo.addFocusListener(new FocusListener() { 
     @Override 
     public void focusLost(FocusEvent e) { 
      String text = combo.getText(); 
      if(text.isEmpty()) { 
       combo.setText(placeholder); 
       combo.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); 
      } 
     } 

     @Override 
     public void focusGained(FocusEvent e) { 
      String text = combo.getText(); 
      if(text.equals(placeholder)) { 
       combo.setText(""); 
       combo.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); 
      } 
     } 
    }); 
+0

これは実際にはかなり面白いです。私はもう一度コンボの周りにいるときに試してみてください。 – 2c00L

関連する問題