سؤال

ولدي حاليا برنامج جافا الصغيرة التي أود أن تشغيل كل من على سطح المكتب (أي في 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()

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

المحلول

الصغير هو الحاويات ، فقط <لأ href = "http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#add(java.awt.Component)" يختلط = "نوفولو noreferrer"> إضافة قماش الخاص بك هناك.

نصائح أخرى

وعموما، فإن الطريقة سيكون لديك أحد التطبيقات التي هي أيضا الصغير هو أن يكون لديك الدرجة نقطة دخول تمتد الصغير، ويكون الإعداد لها إضافة قماش لنفسها، الخ الخ.

وبعد ذلك، في النسخة الأسلوب الرئيسي، أنت فقط مثيل الطبقة الصغير الخاص بك وإضافته إلى إطار جديد (أو 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 الصغير.

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