سؤال

أنا أعمل على مشروع يستخدم JTable لعرض عمود من التواريخ، من بين أشياء أخرى.كنا بحاجة إلى التحقق من صحة إدخال المستخدم للتواريخ، لذلك قمت بتنفيذ مجموعة من الإخفاء للتحقق من صحة التنسيق والتحليل للتحقق من صحة التاريخ الفعلي.لقد قمت بذلك باستخدام CellEditor مخصص لعمود التاريخ.

داخل MaskedCellEditor، لدي JFormattedTextField.أقوم بإعداد اخفاء التواريخ.ثم أقوم بإضافة InputVerifier للسماح بالتحقق الفعلي.يقوم جهاز InputVerifier الخاص بي بتنفيذ التحقق () للتحقق:1.textField.isEditValid() 2.DateValidator.ValidDate().إذا كان أي منهما غير صالح، فإن التحقق يُرجع خطأ ويقوم InputVerifier بتأمين التركيز في حقل النص (محرر الخلية) ويتم عرض مربع حوار رسالة صغيرة لتذكير المستخدم بتنسيق التاريخ.

رسالة الخطأ عبارة عن JDialog صغير وغير مزخرف وغير مشروط وغير قابل للتركيز ويظهر أسفل الخلية التي يتم تحريرها.يختفي عند الضغط على مفتاح أو التحقق من التاريخ بنجاح.إنه يعمل بشكل رائع باستثناء حالة الحافة الصغيرة.

إذا قام المستخدم بتحديد زر قائمة أعلى التطبيق أثناء ظهور تعديل غير صالح في مربع الحوار، فإنه يقوم بتبديل الشاشات، مما يؤدي إلى تدمير كل شيء موجود حاليًا على الشاشة (بما في ذلك الجدول).ومع ذلك، نظرًا لأنه يتم عرض مربع الحوار وعدم حدوث ضغط على مفتاح/تحرير ناجح، فلن يتم إخفاء مربع الحوار أبدًا.ويظل مرئيًا في سياق غير ذي صلة تمامًا على شاشة مختلفة.بمجرد قيام المستخدم بإيقاف تشغيل الشاشة مع الجدول، لا توجد طريقة للمستخدم للتخلص من مربع الحوار.

لقد ناقشت إمكانية إنشاء مؤقت و/أو MouseListener في مربع الحوار نفسه مما قد يتسبب في اختفائه، لكنني أشعر أنني أتجاهل المشكلة الفعلية.لم يتم التخلص من مربع الحوار مطلقًا وأنا متأكد تمامًا من أنه لا يزال مضبوطًا ليكون مرئيًا ويمنع أداة تجميع البيانات المهملة من التخلص منه.

لدي طريقة تنظيف على اللوحة التي تحتوي على JTable، لكن لا يمكنني العثور على طريقة جيدة للإشارة إلى مربع الحوار (أحد مكونات InputVerifier) ​​للتخلص منه.مربع الحوار بعيد جدًا عن اللوحة الرئيسية للجدول.(اللوحة -> JTable -> CellEditor -> JFormattedTextField -> InputVerifier -> JDialog)

هل لديك أي أفكار حول كيفية فرض إخفاء مربع الحوار عند تدمير الجدول؟اذا كنت تريد تفاصيل اضافية اعلمنى بذلك.أحاول ألا أجعلكم تتورطون في التفاصيل، لكن هناك الكثير مما يحدث.

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

المحلول

كفكرة أولى، ألا يمكنك السير على نهج المستمع.إذا كان لديك أسلوب CloseErrorDialog()‎ الذي يتم استدعاؤه عند التحقق من الصحة بنجاح، فيمكنك أيضًا استدعاؤه عند تحديد إجراء القائمة.

كبديل، ربما يمكنك التحكم في الانتقال من قائمة إلى أخرى بطريقة ما، وإنشاء طريقة "تنظيف" تؤدي إلى إغلاق أي مربعات حوار موجودة للأخطاء.وهذا من شأنه أن يسمح لأية إجراءات أخرى يلزم اتخاذها عند تغيير القوائم أن تحدث في نفس المكان.

مجرد بضع أفكار سريعة في أعلى رأسي.آمل أن يكونوا على غرار ما قصدته

نصائح أخرى

سيصوت لي العديد من الأشخاص لقول هذا، ولكن يبدو أن مربع الحوار الخاص بك يجب أن يكون مشروطًا بحيث لا يتمكن المستخدمون من الابتعاد عنه دون رفضه أولاً.أو على الأقل قم بتعطيل القوائم التي تسمح للأشخاص بالتبديل أثناء عرض مربع الحوار هذا.

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