2

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);

これを適切に処理する方法を知っている人はいますか?

前もって感謝します!

左側に SWT.Multi、右側に SWT.SINGLE のテキスト

編集:リクエストに応じて、ポップアップのソースを次に示します。カーソル位置の横にポップアップを開きたいので、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 要素から独立していることに注意してください。コードは、open()他の JFace ダイアログ (TitleAreaDialog など) のようにポップアップの完了を待ちません。

4

1 に答える 1

2

まず、 のSWT.BORDER代わりに使用しSWT.BORDER_SOLIDます。運が良ければ、これがどういうわけか問題を引き起こします。それ以外は、小さなスニペットだけでは、何が問題なのかを理解するのは困難です。後で背景色をリセットする他のコードがない限り、これは機能するはずです。

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

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

  // set the color here

  return contents;
}
于 2012-04-05T09:11:06.777 に答える