2012-04-05 11 views
1

私は、JFace PopupDialogをユーザ入力用の軽量ダイアログとして使いたいと考えています。しかし、私はテキストウィジェットの背景色にいくつかの問題があります。JFace PopupDialogのウィジェットの背景色

1にあるように、SWT.MULTIテキストウィジェットには背景と枠線がなく、SWT.SINGLEテキストウィジェットには背景がありません。誰もがこれを適切に処理するために、どのように任意のアイデアを持ってい

Text comment = new Text(composite, SWT.MULTI|SWT.BORDER); 
comment.setFocus(); 
comment.setBackground(new Color(Display.getDefault(), new RGB(000, 000, 000))); 
// method of PopupDialog 
applyBackgroundColor(new Color(Display.getDefault(), new RGB(000, 000, 000)), comment); 

: は、私は背景色を上書きしようとしましたか?

ありがとうございます!

Text SWT.Multi on the left, SWT.SINGLE on the right side

EDIT:要求されたようが、ここでポップアップのソースです。私はポップアップが次のカーソルの位置に開くことがしたかったように私は、PopupDialogをサブクラス化:

public class MouseLocationPopupDialog extends PopupDialog { 
private final static int SHELL_STYLE = PopupDialog.INFOPOPUP_SHELLSTYLE; 

public MouseLocationPopupDialog(Shell parent, String infoText) { 
    this(parent, SHELL_STYLE, true, false, false, false, false, null, infoText); 
} 

public MouseLocationPopupDialog(Shell parent, String titleText, String infoText) { 
    this(parent, SHELL_STYLE, true, false, false, false, false, titleText, infoText); 
} 

public MouseLocationPopupDialog(Shell parent, String infoText, final Point size) { 
    this(parent, infoText); 
    getShell().setSize(size); 
} 

public MouseLocationPopupDialog(Shell parent, int shellStyle, boolean takeFocusOnOpen, boolean persistSize, boolean persistLocation, boolean showDialogMenu, boolean showPersistActions, String titleText, String infoText) { 
    super(parent, shellStyle, takeFocusOnOpen, persistSize, persistLocation, showDialogMenu, showPersistActions, titleText, infoText); 
} 

@Override 
protected void adjustBounds() { 
    super.adjustBounds(); 
    Display d = Display.getCurrent(); 
    if (d == null) { 
     d = Display.getDefault(); 
    } 
    Point point = d.getCursorLocation(); 
    getShell().setLocation(point.x + 9, point.y + 14); 
} 
} 

次のように実際の使用法は次のとおりです。このポップアップは独立していること

final PopupDialog dialog = new MouseLocationPopupDialog(HandlerUtil.getActiveShell(event), "Title", "Bottom bar") { 
@Override 
protected Control createDialogArea(Composite parent) { 
    Control composite = super.createDialogArea(parent); 
    Composite table = new Composite((Composite) composite, SWT.NONE); 
    table.setLayout(new GridLayout(2, true)); 
    // text is a member variable 
    text = new Text(table, SWT.SINGLE | SWT.BORDER); 
    Button submit = new Button(table, SWT.PUSH); 
    return composite; 
} 

@Override 
protected Control createContents(Composite parent) { 
    Control contents = super.createContents(parent); 

    final Color backgroundColor = new Color(Display.getCurrent(), new RGB(255, 255, 255)); 
    text.setBackground(backgroundColor); 
    final Color foregroundColor = new Color(Display.getCurrent(), new RGB(0,0,0)); 
    text.setForeground(foregroundColor); 
    backgroundColor.dispose(); 
    foregroundColor.dispose(); 

    return contents; 
} 
}; 
dialog.open(); 

注意を他のUI要素から:コードは、他のJFaceのダイアログ(例えばTitleAreaDialog)すべての

+0

ジャスト(applyBackground、ちょうどcomment.setBackgroundなし)は、Windows 7上でのEclipseインディゴ上でこれを試したし、テキストボックス黒を示しました。バックグラウンド。あなたはどのOSを使用していますか?また、終了したColorオブジェクトを処分することを忘れないでください。 –

+0

私はOSXを使用しています。 WindowsとLinuxで試してみます。 –

+0

ただのofftopic:あなたは全体のコードを投稿できますか?私はこのようなダイアログに興味があります –

答えて

2

まずのようなポップアップopen()の完了を待つ代わりにSWT.BORDER_SOLIDSWT.BORDERを使用することはありません。 あなたが運が良ければ、何とか問題を引き起こします。それ以外に、ちょっとしたスニペットから、何がうまくいかないかを見るのは難しいです。後で背景色をリセットする他のコードがない限り、これはうまくいくはずです。

更新PopupDialogの方法getBackground()をオーバーライドして、それはあなたが望む色を返すせてみてください。あなたのコードはおそらくcreateDialogArea(..)にあり、PopupDialogはこの色を基本的にすべての後にのコードに適用します。 は、あなただけの特定のコントロールの背景色を変更したい場合は、次のことを試みることができる:

@Override 
protected Control createContents(Composite parent) { 
    Composite contents = super.createContents(parent); 

    // set the color here 

    return contents; 
} 
+0

これは私の問題です。それ以降は他のコードはありません。上で述べたように、IndigoとWindows 7ではうまくいくようです。しかし、良いニュースの1つは、境界線が 'SWT.BORDER'と表示されていることです。 –

+0

私の答えの更新を見てください。 – p12t

+0

テキストフィールドがメンバー変数で、上記のように - 私はcreateContentsの背景色を設定します –