این کد و دستورالعمل برای جستجو و یافتن تمام اشیاء جاوا درون یک کانتینر جاوا یا هندل رابط کاربری گرافیکی (GUI) در MATLAB استفاده می‌شود. اگر پارامتر خروجی مشخص نشود، یک پنجره GUI به صورت تعاملی نمایش داده خواهد شد که شامل نمای درختی از تمام اجزای کانتینر، ویژگی‌ها و بازخوردها (callbacks) آنها می‌باشد.

سینتکس:

[handles, levels, parentIds, listing] = findjobj(container, 'PropName', PropValue(s), ...)

ورودی‌ها:

  1. container: هندل (اشاره‌گر) GUI اختیاری. اگر این ورودی داده نشود، به طور پیش‌فرض کانتینر جاری (که معمولاً به معنی پنجره یا فریم فعلی است) استفاده می‌شود.

  2. ‘PropName’, PropValue: لیستی از جفت‌های ویژگی (property) و مقدارهای آن. این ویژگی‌ها می‌توانند نام‌دار باشند. در واقع می‌توانید فیلترهای مختلفی را برای جستجو مشخص کنید. ویژگی‌های پشتیبانی شده شامل موارد زیر هستند:

    • ‘position’: فیلتر بر اساس موقعیت مشخص (X, Y). توجه داشته باشید که این موقعیت باید بر اساس مختصات MATLAB باشد، نه جاوا.
    • ‘size’: فیلتر بر اساس اندازه اجزا (عرض و ارتفاع به پیکسل).
    • ‘class’: فیلتر بر اساس کلاس جاوا یا زیررشته‌ای از آن. این فیلتر حساس به بزرگی و کوچکی حروف نبوده و می‌تواند شامل wildcards (نمادهای تطبیق الگو) باشد.
    • ‘property’: فیلتر بر اساس ویژگی‌های خاص. برای مثال، استفاده از findjobj(..., 'property', {'Text', 'click me'}) تمام اجزای دارای ویژگی متنی “click me” را پیدا خواهد کرد.
    • ‘depth’: عمق جستجو را تعیین می‌کند. برای مثال، عمق 0 فقط اجزای سطح بالای کانتینر را نشان می‌دهد و عمق Inf تمام اجزاء را شامل می‌شود.
    • ‘flat’: معادل ‘depth’,0 است.
    • ‘not’: فیلتر معکوس. به این معنا که تمام اجزایی که ویژگی خاصی را نداشته باشند یا ویژگی را منطبق با مقادیر خاصی نداشته باشند را نمایش می‌دهد.
    • ‘persist’: اطلاعات مربوط به اجزای پنجره‌ها را ذخیره می‌کند تا جستجوهای بعدی سریع‌تر انجام شوند.
    • ‘print’: تمام اجزای جاوا را به صورت یک لیست سلسله‌مراتبی نمایش می‌دهد. این گزینه معمولاً در انتهای جستجوها برای مشاهده نتایج فیلتر استفاده می‌شود.
    • ‘list’: همانند ‘print’ است.
    • ‘nomenu’: پردازش منوها را نادیده می‌گیرد تا تنها اجزای اصلی نمایش داده شوند و سرعت پردازش افزایش یابد.
    • ‘debug’: موقعیت‌ها و هندل‌های تمام اجزای کانتینر را در پنجره دستورات MATLAB نمایش می‌دهد.

خروجی‌ها:

  1. handles: لیستی از هندل‌های ارجاعی به اجزای جاوا.
  2. levels: لیست سطح سلسله‌مراتبی هر عنصر جاوا (سطح بالا = 0).
  3. parentIds: لیست ایندکس‌ها (در هندل‌های فیلترنشده) که والد هر عنصر جاوا را نشان می‌دهد.
  4. listing: نتایج مربوط به گزینه‌های ‘print’ یا ‘list’. اگر این ویژگی‌ها فعال نباشند، این خروجی خالی خواهد بود.

مثال‌ها:

  1. ایجاد یک دکمه و یافتن شیء جاوای آن:

    hButton = uicontrol('string','click me');
    jButton = findjobj(hButton, 'nomenu');
    jButton.setFlyOverAppearance(1);
    jButton.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.HAND_CURSOR));
    set(jButton, 'FocusGainedCallback', @myMatlabFunction);

    در این مثال، یک دکمه ایجاد می‌شود و سپس با استفاده از findjobj، شیء جاوای مربوط به آن دکمه پیدا می‌شود.

  2. تغییر ویژگی‌های یک ویرایشگر متنی:

    hEditbox = uicontrol('style', 'edit');
    jEditbox = findjobj(hEditbox, 'nomenu');
    jEditbox.setCaretColor(java.awt.Color.red);
    jEditbox.KeyTypedCallback = @myCallbackFunc;
    jEditbox.requestFocus;

    در اینجا، یک ویرایشگر متنی ایجاد شده و ویژگی‌های آن مانند رنگ نشانگر (caret) به رنگ قرمز تغییر می‌یابد.

محدودیت‌ها و مشکلات شناخته‌شده:

  • در حال حاضر این ابزار تنها می‌تواند یک کانتینر را در هر بار جستجو پردازش کند.
  • پردازش اولیه ممکن است کند باشد، به خصوص زمانی که پنجره دارای بسیاری از اجزاء رابط کاربری باشد. بهتر است از گزینه ‘persist’ برای سرعت بخشیدن به جستجوها استفاده کنید.
  • در حال حاضر جستجو برای هندل‌های MATLAB به‌طور دقیق تنها با استفاده از موقعیت و اندازه انجام می‌شود، که ممکن است روش بهتری برای شناسایی کانتینرها در آینده پیشنهاد شود.

هشدار:

این کد به‌شدت به قابلیت‌های مستند نشده و پشتیبانی نشده در MATLAB وابسته است. این ابزار در MATLAB نسخه 7 به بالا کار می‌کند، اما باید با احتیاط استفاده شود.

خلاصه:

این ابزار به کاربران این امکان را می‌دهد تا اجزای جاوا را درون پنجره‌های MATLAB پیدا کرده و ویژگی‌ها و عملکردهای آن‌ها را به راحتی بررسی کنند. این قابلیت برای تجزیه و تحلیل و سفارشی‌سازی دقیق رابط‌های کاربری گرافیکی در MATLAB بسیار مفید است.

دسته بندی: برچسب ها: