Как установить цвет переднего плана кнопки SWT? - PullRequest
5 голосов
/ 20 января 2011

Класс SWT Button имеет метод setForeground(Color), но, похоже, он не имеет никакого эффекта (этот метод фактически находится в суперклассе Button).Javadoc говорит, что этот метод является подсказкой и может быть переопределен платформой.Моя платформа - Windows.

  • Значит ли это, что в Windows невозможно установить цвет переднего плана кнопки?
  • Работает ли она на других платформах?есть обходной путь?

Ответы [ 4 ]

5 голосов
/ 20 января 2011

В Windows setForeground для Buttons не имеет эффектов.

В качестве обходного пути добавьте PaintListener к Button.В этом методе Listener paintControl получите сгенерированное событие GC и, с его помощью, переписайте текст вашего Button, используя нужный вам цвет.

Фактически вы можете нарисовать что угоднонад вашим Button.

2 голосов
/ 30 января 2013

Если вам нужна кнопка со стилем SWT.CHECK, вы можете попробовать использовать кнопку без текста и добавить элемент метки.Пример:

chkAutorun = new Button(fCompositeLogin, SWT.CHECK);
Label lblAutorun = new Label(fCompositeLogin, SWT.NONE);
lblAutorun.setForeground(white);
lblAutorun.setText("Autorun");
0 голосов
/ 01 мая 2014

Это код для реализации FOreground Color в кнопках в SWT, позволяющий также отображать и включать мнемоническую клавишу, нажимая Alt + «Мнемоническая клавиша»;

Button radioButton=new Button(parent,SWT.RADIO);
StringBuffer sb = new StringBuffer("I am a Coloured radio button");
String name=null;
 String S = "I am a Coloured radio button";
String substr="C";
int i=S.indexOf(substr);
sb.insert(i,"&");
S=sb.toString();
name=sb.substring(i, i+2);
name=sb.toString();
String whiteSpace=" ";
final String TName=S;

for(int l=0;l<1000;l++)
    whiteSpace=whiteSpace.concat("            ");

radioButton.setText(name+whiteSpace);

radioButton.addPaintListener(new PaintListener(){
 String name=TName;
    @Override
    public void paintControl(PaintEvent e) {
        // TODO Auto-generated method stub
        e.gc.setForeground(hex2Col("ffffcc"));
        int x=21;
        int y=21;
        e.gc.drawText(name, x,y,SWT.DRAW_MNEMONIC | SWT.TRANSPARENT);

    }

});

Примечание: hex2Col - это мой собственный метод преобразования шестнадцатеричного цветового кода в тип цвета

Примечание. Здесь ALT + C - комбинация мнемонических клавиш, которую я использовал

0 голосов
/ 15 июля 2011

В Windows setForeground также не работает для группы.

Если вы можете убедить своих пользователей использовать классическую тему, setForeground чудесным образом сработает.

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