SWT TextにはsetMessage
というメソッドがあり、これをSWT.SEARCH
とともに使用して、テキストボックスに初期フェードアウトメッセージを配置することができます。SWT Comboの初期メッセージを設定する
SWT Comboで同様のことができますか?それはsetMessage()
メソッドを持っていないようですので、ここでいくつかのトリックを適用する必要があります。
SWT TextにはsetMessage
というメソッドがあり、これをSWT.SEARCH
とともに使用して、テキストボックスに初期フェードアウトメッセージを配置することができます。SWT Comboの初期メッセージを設定する
SWT Comboで同様のことができますか?それはsetMessage()
メソッドを持っていないようですので、ここでいくつかのトリックを適用する必要があります。
あなたが正しいです、コンボは、テキストウィジェットのようなメッセージを設定するための定期的な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以外のコントロールへの描画はサポートされていないため、すべてのプラットフォームで機能しない可能性があります。
私の目的のために働くペイントリスナーのより簡単な代替方法は、プログラムでテキストとテキストの色を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));
}
}
});
これは実際にはかなり面白いです。私はもう一度コンボの周りにいるときに試してみてください。 – 2c00L
BWT、 'これは、一般的にSWT.SEARCH''で使用されsetMessage'が、 'SWT.SINGLE'スタイルを持つすべてのテキストウィジェットのために働きます。 –