Java SWT 애플리케이션을위한 Google-Chrome 유사 타이틀 바 구현 방법
-
06-07-2019 - |
문제
Windows에서만 실행되는 Java/SWT 응용 프로그램의 개발을 상속했습니다. 범위가 필요한 기능 중 하나는 SWT Windows 제목 표시 줄 대신 Google-Chrome 유형의 타이틀 바입니다. 응용 프로그램의 탭은 창 제어 버튼과 동일한 수준으로 나타납니다.
내 이해는 다음을 필요로한다는 것입니다.
- 메뉴와 달리 사용자 정의 모양을 렌더링하고 탭을 관리 할 수있는 Windows 위젯을 작성하십시오.
- JNI를 통해 Java로 사용하기 위해 Windows 위젯을 DLL로 노출하십시오.
- 사용자 정의 SWT 위젯을 작성하여 랩핑하고 탭 관리 인터페이스를 노출시킵니다.
Java 프로그래밍, Swing/AWT를 통한 GUI 프로그래밍 및 비 Gui C# 프로그래밍에 대한 많은 경험이 있습니다. Windows GUI 프로그래밍과 SWT는 나에게 새로운 것이므로 어디서부터 시작 해야할지 잘 모르겠습니다. 내가 지금까지 찾은 최고는 2001 년 기사입니다. 나만의 SWT 위젯 작성.
가장 큰 미지의 것은 사용자 정의 Windows 응용 프로그램 창을 구현하는 가장 좋은 방법입니다.
해결책
제목 플래그없이 쉘 인스턴스를 작성한 다음 Google- 크롬 유사 탭을 수동으로 렌더링 할 수 있습니다. 이렇게하면 a를 만들 수도 있습니다 비 교정 창
다른 팁
SWT의 JNI 층에 아직없는 것들을 다룰 때는 항상 JNA. JNA 프로토 타입이 있으면 SWT의 기본 인터페이스를 확장하거나 자신의 별도의 JNI 레이어를 만들 수 있습니다 (SWT 탄소/코코아 위젯을 다룰 때 여러 번 저에게 잘 작동하는 접근 방식입니다).
같은 트림없이 쉘을 만드는 것이 좋습니다.
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 ();
}
}