سؤال

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

ولقد دعوت panel.revalidate ()، لكنه لا يعمل.

وهذا هو جزء من التعليمات البرمجية التي اعتدت ولكن لا يعمل. وكان العرض JPanel ثابت.

    String[] a = {"image1.txt","image2.txt","image3.txt"};
    List<String> files = Arrays.asList(a);


    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == answer1){
        fileNumber++;
        //call other class for painting (files=array files, fileNumber=index of the array)  
        draw = new drawingPanel(files,fileNumber);
        panel.add(draw);
    }
    panel.revalidate();
    panel.repaint();
}
هل كانت مفيدة؟

المحلول

وكنت قد تحاول الحفاظ على الإشارة إلى drawingPanel وتدعو <لأ href = "http://java.sun.com/javase/6/docs/api/java/awt/Container.html#remove(java.awt .Component) "يختلط =" نوفولو noreferrer "> إزالة () على drawingPanel الحالية قبل إعادة مضيفا أنه. وفقا ل JPanel جافادوك، والتخطيط غير FlowLayout افتراضيا - التي لا سوف استبدال الصورة كأنك تنوي، ولكن بدلا من ذلك وضع drawingPanel بجانب الحق من سابقتها. (ماذا يحدث عند تغيير حجم النافذة؟)

وبالمناسبة، كيف يمكن معالجة الحالة حيث تحصل الماضي آخر صورة في مجموعة؟

نصائح أخرى

هل عرض واحد فقط الرسم في وقت واحد؟ إذا كان الأمر كذلك، قد ترغب في محاولة استخدام CardLayout، لذلك يمكنك التبديل بين الرسومات بسهولة. انظر http://java.sun.com/docs/books /tutorial/uiswing/layout/card.html للحصول على مثال على ذلك.

وكان لي مشكلة مشابهة في اليوم الآخر محاولة عرض أزرار مختلفة على واجهة المستخدم الخاصة بي ديناميكيا حسب علامة التبويب التي لJTabbedPane اختار المستخدم. كان CardLayout مجرد شيء لجعل الامور سهلة.

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