小部件的背景颜色在JFace PopupDialog

时间:2012-04-05 07:42:19

标签: java swt eclipse-rcp widget jface

我想将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

编辑:根据要求,这是弹出窗口的源代码。我将PopupDialog子类化,因为我希望在Cursor位置旁边打开弹出窗口:

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对话框那样等待弹出窗口open()的完成(例如TitleAreaDialog)

1 个答案:

答案 0 :(得分:2)

首先,使用SWT.BORDER代替SWT.BORDER_SOLID如果你很幸运,这会以某种方式导致你的问题。除此之外,仅从你的小片段就很难看出出了什么问题。除非有其他代码稍后重置背景颜色,否则这应该有效。

<强>更新: 尝试覆盖getBackground()的{​​{1}}方法,让它返回您想要的颜色。您的代码可能位于PopupDialog,而createDialogArea(..)将此颜色应用于 代码后的所有内容。 如果您只想更改特定控件的背景颜色,可以尝试以下操作:

PopupDialog