سؤال

alt text

لقد ورثت تطوير تطبيق Java/SWT الذي يعمل على نظام التشغيل Windows فقط.أحد طلبات الميزات التي أحتاج إلى تحديد نطاقها هو شريط عنوان من نوع Google Chrome بدلاً من شريط عنوان SWT windows.تظهر علامات تبويب التطبيق على نفس مستوى أزرار التحكم في النافذة.

ما أفهمه هو أنني سأحتاج إلى:

  • اكتب أداة Windows قادرة على تقديم المظهر المخصص وإدارة علامات التبويب بدلاً من القوائم.
  • كشف أداة Windows كملف dll للاستخدام في Java عبر JNI
  • اكتب عنصر واجهة مستخدم SWT مخصصًا لتغليفه وكشف واجهة إدارة علامات التبويب.

لدي خبرة كبيرة في برمجة Java، وبرمجة واجهة المستخدم الرسومية باستخدام Swing/AWT، والبرمجة التي لا تعتمد على واجهة المستخدم الرسومية C#.تعتبر برمجة Windows GUI وSWT جديدة بالنسبة لي، لذا لست متأكدًا من أين أبدأ.أفضل ما وجدته حتى الآن هو مقال عام 2001 عن كتابة القطعة SWT الخاصة بك.

أكبر ما لا أعرفه هو أفضل طريقة لتنفيذ نافذة تطبيق Windows مخصصة.

هل كانت مفيدة؟

المحلول

يمكنك إنشاء مثيل Shell بدون علامة TITLE ثم عرض علامات التبويب المشابهة لـ Google-chrome يدويًا.بهذه الطريقة يمكنك حتى إنشاء ملف نوافذ غير مستطيلة

نصائح أخرى

عند التعامل مع الأشياء التي لم تكن موجودة بعد في طبقة JNI لـ SWT، يجب أن تتذكر دائمًا أنه يمكنك إنشاء نماذج أولية للأشياء بسرعة جينا.عند النموذج الأولي لـ JNA، يمكنك إما توسيع واجهة SWT الأصلية أو إنشاء طبقة JNI المنفصلة الخاصة بك (هذا هو النهج الذي نجح معي عدة مرات عند التعامل مع عناصر واجهة مستخدم SWT Carbon/Cocoa)

أوصي بإنشاء غلاف بدون Trim كما يلي:

new Shell (display, SWT.NO_TRIM);

سيؤدي هذا إلى إنشاء غلاف بدون شريط العنوان.وبعد ذلك يمكنك إنشاء أزرار الإغلاق/التصغير/التكبير الخاصة بك.

فيما يلي مثال يُنتج شريط تقدم وحيدًا بدون عمل شريط العنوان.

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

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top