رسم قماش في الصغير
سؤال
ولدي حاليا برنامج جافا الصغيرة التي أود أن تشغيل كل من على سطح المكتب (أي في JFrame) وفي الصغير. حاليا يتم التعامل مع كل من الرسم والمنطق من قبل طبقة تمتد قماش. هذا يعطيني الأسلوب الرئيسي لطيفة جدا لتطبيق سطح المكتب:
public static void main(String[] args) {
MyCanvas canvas = new MyCanvas();
JFrame frame = MyCanvas.frameCanvas(canvas);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.loop();
}
هل يمكنني القيام بشيء مماثل للصغير؟ ومن الناحية المثالية MyCanvas سوف تبقى كما هي لكلتا الحالتين.
وإذا لم تكن متأكدا من المهم لكنني رسم باستخدام BufferStrategy مع setIgnoreRepaint(true)
.
تعديل : لتوضيح، ويبدو لي أن المسألة اللوحة قماش - منذ ويجري كل لوحة من استدعاء canvas.loop()
نصائح أخرى
وعموما، فإن الطريقة سيكون لديك أحد التطبيقات التي هي أيضا الصغير هو أن يكون لديك الدرجة نقطة دخول تمتد الصغير، ويكون الإعداد لها إضافة قماش لنفسها، الخ الخ.
وبعد ذلك، في النسخة الأسلوب الرئيسي، أنت فقط مثيل الطبقة الصغير الخاص بك وإضافته إلى إطار جديد (أو JApplet / JFrame، وما إلى ذلك).
هنا و <لأ href = "HTTP: // شبكة الاتصالات العالمية .devx.com / نصائح / نصيحة / 16650 "يختلط =" نوفولو noreferrer "> هنا للحصول على أمثلة من هذه التقنية، والتي تتلخص أساسا الى (من المثال الأول):
public static void main(String args[])
{
Applet applet = new AppletApplication();
Frame frame = new Frame();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.add(applet);
frame.setSize(IDEAL_WIDTH,IDEAL_HEIGHT);
frame.show();
}
وCanvas
غير مناسب لإضافة لسوينغ المكونات. استخدام JComponent
بدلا من ذلك (وsetOpaque(true)
).
وينبغي دائما أن التلاعب مكونات سوينغ على AWT حدث مرسل الموضوع (بتوقيت شرق الولايات المتحدة). استخدام java.awt.EventQueue.invokeLater
(invokeAndWait
لتطبيقات). يجب عدم القيام بأي عمليات حظر من بتوقيت شرق الولايات المتحدة، حتى يبدأ المواضيع الخاصة بك لذلك. افتراضيا كنت تقوم بتشغيل في الموضوع الرئيسي (أو موضوع صغير لتطبيقات)، وهي منفصلة تماما عن بتوقيت شرق الولايات المتحدة.
وأقترح إزالة أي اعتماد من MyCanvas
لJFrame
. أقترح أيضا حفظ متاحة للتطبيقات باستخدام إطار منفصل عن أن استخدام تطبيقات. إضافة عنصر إلى JApplet
هو نفس لJFrame
(في كلتا الحالتين هناك الاشكالات حيث الواقع ما يحدث هو أن add
يدعو فعلا getContentPane().add
التي يمكن أن تسبب بعض الارتباك غير ضرورية). والفرق الرئيسي هو أنه لا يمكنك pack
الصغير.