Изменение цвета фона org.eclipse.swt.widgets в Windows

Прямо сейчас я пытаюсь изменить цвет фона org.eclipse.swt.widgets.Button со следующим кодом:

     Кнопка sceneButton = новая кнопка (граница, SWT.TOGGLE | SWT.FLAT);  
     sceneButton.setBackground (Color.RED);

Это отлично работает, когда я запускаю программу в Solaris, но ничего не делает, когда запускаю код в Windows. Это возможно? Если нет, есть ли какое-то обходное решение, которое позволило бы мне изменить цвет фона (даже если «цвет» – это изображение), все еще отображая текст в кнопке? Благодаря!

Вы не можете. В документации метода 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-объекты» определяют фон кнопки. Это определяется темой каждого пользователя.

alt text

Одна вещь в 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, если вам нужно это делать часто.

Давайте будем гением компьютера.