2009-10-27 1 views
8

alt textКак реализовать Google-хром-как строку заголовка для Java SWT приложения

Я унаследовал развитие приложения в Java/SWT работает только на Windows. Один из запросов функций, которые мне нужны для области видимости, - это заголовок заголовка типа Google-chrome вместо строки заголовка окна SWT. Вкладки приложения отображаются на том же уровне, что и кнопки управления окном.

Я понимаю, что мне нужно:

  • написать виджет для Windows, способная отображать пользовательский вид и управление вкладками, в отличие от меню.
  • показать виджет Windows как DLL для использования на Java через JNI
  • написать собственный SWT-виджет, чтобы обернуть его и открыть интерфейс управления вкладками.

У меня есть большой опыт программирования на Java, программирование графического интерфейса с использованием Swing/AWT и программирование на языке без GUI. Программы для Windows GUI и SWT новы для меня, поэтому я не уверен, с чего начать. Самое лучшее, что я нашел до сих пор, - статья 2001 года на writing your own SWT widget.

Мое самое большое неизвестное - лучший способ реализовать пользовательское оконное окно Windows.

+0

Я так понимаю, что это было бы почти невозможно сделать это с помощью SWT, как SWT в значительной степени самой платформы агностик инструмент с графическим интерфейсом, и, таким образом, наиболее стандартизированы. Графический интерфейс, такой как Chrome, требует гораздо более прямого интерфейса с операционной системой, поскольку он не использует стандартные элементы GUI ОС. Вам действительно нужно будет написать свой собственный вкладку (и, вероятно, оконный) менеджер. – HalfBrian

+1

@ HalfBrian: На самом деле Swing является самой агностикой платформы, поскольку он отображает все компоненты отдельно, в то время как SWT использует компоненты ОС. Естественно, это не делает остальные ваши комментарии менее достоверными :) –

ответ

8

Вы можете создать экземпляр оболочки без флага TITLE, а затем вручную отобразить вкладки с Google-хромом. Таким образом, вы даже можете создать non-rectangular windows

+0

Спасибо, Евгений, это меня движется в правильном направлении. – MartyC

2

при работе с вещами, которые еще не находятся в слое JNI SWT, вы всегда должны помнить, что вы можете быстро прототипировать вещи с помощью JNA. Когда прототип JNA, вы можете либо расширить собственный интерфейс SWT, либо создать собственный отдельный уровень JNI (это подход, который много работал для меня во время работы с виджетами SWT Carbon/Cocoa)

+0

Я раньше этого не видел, спасибо. – MartyC

0

Я рекомендую создавать оболочка без обрезки:

new Shell (display, SWT.NO_TRIM); 

Это создаст оболочку без заголовка. Впоследствии вы можете сделать свои собственные кнопки close/minim/maximize.

Вот пример, который порождает одиночный индикатор выполнения без бизнеса в строке заголовка.

enter image description here

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(); 
    } 

}