"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية رسم المستطيلات بشكل دائم في JPanel: استخدام BufferedImages لتجنب الكتابة فوقها؟

كيفية رسم المستطيلات بشكل دائم في JPanel: استخدام BufferedImages لتجنب الكتابة فوقها؟

تم النشر بتاريخ 2024-11-11
تصفح:840

How to Draw Rectangles Permanently in a JPanel: Using BufferedImages to Avoid Overwriting?

رسم المستطيلات بطريقة دائمة

في تطبيق JPanel الخاص بك، تختفي المستطيلات لأن طريقة الطلاء () تقوم بالكتابة فوق الرسومات السابقة. لمنع ذلك، قمنا بتعديل نهجنا:

استخدام BufferedImage كسطح طلاء

بدلاً من الرسم مباشرة على JPanel، نستخدم BufferedImage (canvasImage) كسطح طلاء لدينا. يتيح لنا ذلك تعديل الصورة بشكل دائم دون التأثير على الرسومات السابقة.

طريقة الطلاء () المخصصة

إليك طريقة الطلاء () المعدلة التي تستخدم صورة Canvas للرسم:

@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}

إنشاء الصورة المخزنة وإعدادها

تهيئة صورة القماش في مُنشئ JPanel الخاص بك مثل:

canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

وضبط سياق الرسومات الخاص به للرسم:

Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);
رسم المستطيلات على BufferedImage

الآن، يمكن لطريقة DrawRect() الخاصة بك تعديل صورة Canvas مباشرة:

public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}
ميزات إضافية

يوفر هذا الأسلوب العديد من الفوائد:

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

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3