سؤال

أنا بناء تطبيق صغير باستخدام جافا والتأرجح في netbeans. باستخدام نافذة تصميم NetBeans، قمت بإنشاء JFrame مع JPanel في الداخل.

الآن أريد أن أضيف ديناميكيا بعض jtextFields إلى JPanel. كتبت شيئا من هذا القبيل:

Vector textFieldsVector = new Vector();
JTextField tf;
int i = 0;
while (i < 3) {
    tf = new JTextField();
    textFieldVector.add(tf);
    myPanel.add(tf); //myPanel is the JPanel where I want to put the JTextFields
    i++;
}
myPanel.validate();
myPanel.repaint();

ولكن لا يحدث شيء: عندما أقوم بتشغيل التطبيق، يظهر JFrame مع JPanel في الداخل، ولكن jtextfields لا.

أنا مبتدئ كامل في كتابة تطبيقات Java الرسومية، لذلك أنا بالتأكيد أفتقد شيئا بسيطا للغاية، لكنني لا أستطيع أن أرى ما.

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

المحلول

في NetBeans Gui، قم بتعيين مدير التخطيط لشيء مثل Gridlayout أو Flowlayout (فقط لاختبار). يمكنك القيام بذلك عن طريق الذهاب إلى محرر واجهة المستخدم الرسومية، والنقر فوق لوحةك، ثم النقر بزر الماوس الأيمن فوق وتحديد تخطيط.

بمجرد تغييرها إلى تخطيط مختلف، انتقل إلى الخصائص وتغيير خصائص التخطيط. بالنسبة لل Gridlayout، تريد التأكد من أن لديك 3 خلايا شبكة.

بدلا من mypanel.Validate ()، حاول mypanel.revalidate ().

هذه الطريقة الأكثر قانونية للقيام بذلك هي إنشاء JPanel مخصص (بدون استخدام محرر GUI) الذي يحدد مدير التخطيط الخاص به، يملأ نفسه مع مكونات، إلخ. ثم، في NetBeans Gui Editor، Drag-and-Drop الذي jpanel مخصص في محرر واجهة المستخدم الرسومية. Matisse قادر بالتأكيد على التعامل مع تعديل وقت تشغيل مكونات التأرجح، ولكن هذه ليست الطريقة العادية لاستخدامها.

نصائح أخرى

لقد مر بعض الوقت منذ أن قمت ببعض التأرجح ولكني أعتقد أنك ستحتاج إلى استدعاء حزمة () لإخبار الإطار بإعادة تشغيل مكوناته

تحرير: نعم، كنت أعلم أنه كان لفترة طويلة منذ تأرجح. لقد طرقت التعليمة البرمجية التالية التي تعمل كما هو متوقع على الرغم من إضافة TextFields ...

    JFrame frame = new JFrame("My Frame");
    frame.setSize(640, 480);
    JPanel panel = new JPanel();
    panel.add(new JLabel("Hello"));
    frame.add(panel);
    frame.setLayout(new GridLayout());
    frame.pack();
    frame.setVisible(true);
    Vector textFieldVector = new Vector();
    JTextField tf;
    int i = 0;
    while (i < 3) {
        tf = new JTextField();
        textFieldVector.add(tf);
        panel.add(tf); //myPanel is the JPanel where I want to put the JTextFields
        i++;
    }
    panel.validate();
    panel.repaint();

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

الطريقة المعتادة للاستخدام GroupLayout هو إضافة مكون إلى Group. GroupLayout يحافظ على مرجع إلى Container إنها مسؤولة عن (مما يجعل المنطقي). يجب أن لا تضيف المكون إلى اللوحة دون قيود.

لا تستخدم Grouplayout مع مكون جديد (أضيف ديناميكيا). لن تظهر.

مجرد استخدام .setVisible() طريقة Jtextfield:

JTextField tf = new JTextField() ;
tf.setVisible(true) ;
panel.add(tf) ;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top