Изменение цвета фона org.eclipse.swt.widgets в Windows - PullRequest
7 голосов
/ 22 июля 2010

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

    Button sceneButton = new Button(border, SWT.TOGGLE | SWT.FLAT);  
    sceneButton.setBackground(Color.RED);

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

Ответы [ 4 ]

13 голосов
/ 26 ноября 2012

В операционных системах Windows button.setBackGround не работает напрямую.Небольшой фрагмент кода может помочь.Переопределите событие рисования кнопки, как показано ниже: -

----- obj - это имя кнопки в приведенном ниже фрагменте ------------

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);
    }
});
5 голосов
/ 22 июля 2010

Вы не можете.В документации метода Control.setBackground() упоминается:

For example, on Windows the background of a Button cannot be changed.

4 голосов
/ 19 октября 2010

Фон кнопки в Windows устанавливается вне SWT.

Щелкните правой кнопкой мыши по рабочему столу, выберите «Свойства».

Перейдите на вкладку «Внешний вид».

Нажмите «Дополнительно».

Я считаю, что «3D-объекты» определяют фон кнопки.Это определяется темой каждого пользователя.

alt text

Одна из замечательных особенностей SWT состоит в том, что она использует базовые системные виджеты и темы.Огорчает то, что SWT использует базовые системные виджеты и темы.

2 голосов
/ 04 апреля 2016

Вы можете смоделировать кнопку с помощью CLabel. Добавьте слушатель мыши, чтобы изменить фон при наведении курсора мыши и вверх, а при событии мыши вверх отправьте событие прослушивателя выбора, чтобы оно действовало так же, как кнопка. Например:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...