Изменение цвета фона org.eclipse.swt.widgets в Windows
Прямо сейчас я пытаюсь изменить цвет фона org.eclipse.swt.widgets.Button со следующим кодом:
Кнопка sceneButton = новая кнопка (граница, SWT.TOGGLE | SWT.FLAT); sceneButton.setBackground (Color.RED);
Это отлично работает, когда я запускаю программу в Solaris, но ничего не делает, когда запускаю код в Windows. Это возможно? Если нет, есть ли какое-то обходное решение, которое позволило бы мне изменить цвет фона (даже если «цвет» – это изображение), все еще отображая текст в кнопке? Благодаря!
- Java Swing: как я могу реализовать экран входа в систему, прежде чем показывать JFrame?
- Масштабирование GUI.TextArea с размером экрана
- Java и GUI - Где ActionListeners принадлежат в соответствии с шаблоном MVC?
- Введите ключевой обработчик события
- «Всегда поверх» Windows с Java
- Диспетчер файлов Windows 10 для каждой папки (в режиме) конфигурации панели предварительного просмотра и навигационной панели
- Как установить AUTO-SCROLLING JTextArea в Java GUI?
- QT4: Прозрачное окно с закругленными углами
- Как удалить анимацию максимизации / минимизации окон в Win 7?
- Центр JDialog над родителем
Вы не можете. В документации метода Control.setBackground()
упоминается:
For example, on Windows the background of a Button cannot be changed.
В операционных системах button.setBackGround
не работает напрямую. Небольшой fragment кода может помочь. Переопределите событие рисования кнопки, как показано ниже: –
—– obj – имя кнопки в нижеприведенном fragmentе ————
obj.addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent arg0) { // TODO Auto-generated method stub obj.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); org.eclipse.swt.graphics.Pattern pattern; pattern = new org.eclipse.swt.graphics.Pattern(arg0.gc.getDevice(), 0,0,0,100, arg0.gc.getDevice().getSystemColor(SWT.COLOR_GRAY),230, arg0.gc.getDevice().getSystemColor(SWT.COLOR_BLACK),230); arg0.gc.setBackgroundPattern(pattern); arg0.gc.fillGradientRectangle(0, 0, obj.getBounds().width, obj.getBounds().height, true); } });
Фон кнопки в Windows устанавливается извне SWT.
Щелкните правой кнопкой мыши на рабочем столе, выберите «Свойства».
Перейдите на вкладку «Внешний вид».
Нажмите «Дополнительно».
Я считаю, что «3D-объекты» определяют фон кнопки. Это определяется темой каждого пользователя.
Одна вещь в SWT заключается в том, что она использует базовые системные виджеты и темы. Разочарование SWT заключается в использовании базовых системных виджетов и тем.
Вы можете имитировать кнопку с помощью CLabel. Добавьте mouselistener, чтобы изменить фон на мышку вниз и наведите курсор мыши, и в событии мыши отправите событие прослушивателя выбора так, чтобы он вел себя так же, как кнопка. Например:
Color bg = ... Color shadow = ... CLabel simulatedButton = new CLabel(parent, SWT.PUSH); simulatedButton.setBackground(bg); simulatedButton.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { simulatedButton.setBackground(bg); notifyListeners(SWT.Selection, new Event()); } @Override public void mouseDown(MouseEvent e) { simulatedButton.setBackground(shadow); } });
Это кратковременно изменяет фон кнопки во время нажатия мыши, чтобы дать эффект нажатия кнопки. CLabel также может быть расширен, в отличие от других виджетов SWT, поэтому вы можете создать подclass, если вам нужно это делать часто.