Java SWTアプリケーションにGoogleクロームのようなタイトルバーを実装する方法
-
06-07-2019 - |
質問
Windowsでのみ実行されるJava / SWTアプリケーションの開発を継承しました。スコープを設定する必要がある機能要求の1つは、SWTウィンドウのタイトルバーの代わりにGoogleクロームタイプのタイトルバーです。アプリケーションのタブは、ウィンドウコントロールボタンと同じレベルに表示されます。
私の理解では:
- カスタムルックをレンダリングし、メニューではなくタブを管理できるWindowsウィジェットを作成します。
- WindowsウィジェットをJNI経由でJavaで使用するdllとして公開する
- カスタムSWTウィジェットを記述してラップし、タブ管理インターフェースを公開します。
私は、Javaプログラミング、Swing / AWTを使用したGUIプログラミング、および非GUI C#プログラミングの経験が豊富です。 Windows GUIプログラミングとSWTは初めてなので、どこから始めればよいかわかりません。私がこれまでに見つけた最高のものは、2001年の独自のSWTウィジェットの作成。
最大の未知数は、カスタムWindowsアプリケーションウィンドウを実装する最良の方法です。
解決
TITLEフラグなしでシェルインスタンスを作成し、Googleクロームのようなタブを手動でレンダリングできます。このようにして、非矩形ウィンドウを作成することもできます。
他のヒント
SWTのJNIレイヤーにまだないものを扱うときは、 JNA 。 JNAプロトタイプを作成する場合、SWTのネイティブインターフェイスを拡張するか、独自のJNIレイヤーを作成できます(これは、SWT Carbon / Cocoaウィジェットを扱うときに何度もうまく機能するアプローチです)
次のようなトリムなしでシェルを作成することをお勧めします:
new Shell (display, SWT.NO_TRIM);
これにより、タイトルバーのないシェルが作成されます。その後、独自の閉じる/最小化/最大化ボタンを作成できます。
これは、タイトルバービジネスなしで単独のプログレスバーを生成する例です。
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 ();
}
}
所属していません StackOverflow