Я поддерживаю SWT / JFace приложение, которое должно работать в Windows XP , а также Windows 7 .Приложение имеет TabFolder
, которое содержит Composite
, которое, в свою очередь, содержит виджеты.Ничего необычного, и все работает хорошо, за исключением ...
Кнопки
Хотя в Windows XP они выглядят нормально, в Windows 7 они имеют уродливую серую рамку.*
Я мог установить фон кнопки вручную, но мне не удалось найти способ выяснить фактический цвет фона родителей,getBackground()
всегда возвращает 240, 240, 240, даже если фон на самом деле белый.
Я обнаружил, что в Windows XP фон TabFolder имеет цвет темы 3D-объекты в то время как вВ Windows 7 такой переписки нет.Я пытался установить для каждой отдельной темы ярко-красный, но цвет фона TabFolder не был впечатлен.
Поэтому кнопки SWT сами не устанавливают свой цвет фона правильно, и я не вижу способа найти правильный цвет программно,Что мне делать?
В любом случае, вот код для полного минимального примера для воспроизведения проблемы:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
public class TabTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
TabFolder tabFolder = new TabFolder (shell, SWT.NONE);
TabItem item = new TabItem (tabFolder, SWT.NULL);
item.setText ("Tab Item");
Composite comp = new Composite(tabFolder, SWT.NONE);
comp.setLayout(new RowLayout());
item.setControl(comp);
Button button = new Button(comp, SWT.PUSH);
button.setText("Button ");
tabFolder.setSize (160, 100);
//Event Loop
shell.pack ();
shell.open ();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}