Ich möchte den JFace PopupDialog als leichtgewichtigen Dialog für Benutzereingaben verwenden. Aber ich habe ein paar Probleme mit der Hintergrundfarbe von Text Widgets.Hintergrundfarbe von Widgets in JFace PopupDialog
Wie Sie unten in 1 sehen können, hat ein SWT.MULTI Text Widget keinen Hintergrund und Rahmen, ein SWT.SINGLE Text Widget hat keinen Hintergrund. Ich habe versucht, die Hintergrundfarbe zu überschreiben mit:
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);
Hat jemand hat, wie eine Idee, diese richtig zu handhaben?
Vielen Dank im Voraus!
EDIT: Wie gewünscht, hier ist die Quelle für das Popup. Ich subclassed die PopupDialog, wie ich das Fenster geöffnet werden neben dem Cursor Standort gesucht:
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);
}
}
Die tatsächliche Nutzung ist wie folgt:
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();
Beachten Sie, dass diese Popup von anderen UI-Elementen unabhängig ist : der Code wird nicht für den Abschluss der Popups open()
wie andere JFace Dialoge (zB TitleAreaDialog)
Gerade versucht dies auf Eclipse Indigo auf Windows 7 (ohne applyBackground, nur comment.setBackground) und Textfeld zeigte eine schwarze Hintergrund. Welches Betriebssystem verwenden Sie? Vergiss auch nicht, Farbobjekte zu entsorgen, wenn du damit fertig bist. –
Ich benutze OSX. Ich werde es mit Windows und Linux versuchen. –
nur offtopic: können Sie den gesamten Code posten? Ich bin an einem Dialog wie diesem interessiert –