Как реализовать строку заголовка, похожую на Google-chrome, для приложения Java SWT
-
06-07-2019 - |
Вопрос
Я унаследовал разработку приложения Java / SWT, работающего только в Windows.Один из запросов функции, который мне нужно включить, - это строка заголовка типа Google-chrome вместо строки заголовка SWT Windows.Вкладки приложения отображаются на том же уровне, что и кнопки управления окном.
Насколько я понимаю, мне нужно будет:
- напишите виджет Windows, способный отображать пользовательский внешний вид и управлять вкладками в отличие от меню.
- предоставьте виджет Windows в виде библиотеки dll для использования в Java через JNI
- напишите пользовательский SWT-виджет, чтобы обернуть его и открыть интерфейс управления вкладками.
У меня большой опыт программирования на Java, программирования с графическим интерфейсом на Swing / AWT и программирования на C # без графического интерфейса.Программирование графического интерфейса Windows и SWT для меня в новинку, поэтому я не уверен, с чего начать.Лучшее, что я нашел на данный момент, - это статья 2001 года о написание вашего собственного виджета SWT.
Мое самое большое неизвестное - это лучший способ реализовать пользовательское окно приложения Windows.
Решение
Вы можете создать экземпляр оболочки без флага ЗАГОЛОВКА, а затем вручную отобразить вкладки, похожие на Google Chrome.Таким образом, вы даже можете создать окна непрямоугольной формы
Другие советы
при работе с вещами, которые еще не находятся на уровне JNI SWT, вы всегда должны помнить, что вы можете быстро создавать прототипы с ЮНА.Когда прототип JNA, вы можете либо расширить собственный интерфейс SWT, либо создать свой собственный отдельный слой JNI (этот подход несколько раз хорошо срабатывал у меня при работе с виджетами SWT Carbon / Cocoa)
Я рекомендую создать оболочку без отделки следующим образом:
new Shell (display, SWT.NO_TRIM);
Это создало бы оболочку без строки заголовка.Впоследствии вы можете создать свои собственные кнопки закрытия / сворачивания / разворачивания.
Вот пример, который порождает одинокий индикатор выполнения без заголовка business.
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
public class ProgressBarGui {
Display display;
Shell shell;
public static void main (String [] args) {
final Display display = new Display ();
final Shell shell = new Shell (display, SWT.NO_TRIM);
//Something to put into shell.
shell.setLayout (new FormLayout ());
ProgressBar proBar = new ProgressBar (shell, SWT.SMOOTH);
proBar.setSelection (50);
FormData progBarData = new FormData (100, 20);
progBarData.top = new FormAttachment (0);
progBarData.left = new FormAttachment (0);
proBar.setLayoutData (progBarData);
//recompute shell's size and position to fit widget.
shell.pack ();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
// region.dispose();
display.dispose ();
}
}