0

Addstudent5つのコンボボックスを備えたフレームでは、ボックスがさまざまな配列で埋められています。現在、フレームが単独で実行されている場合、コンボボックスは問題ありません。表示したい配列のすべての項目が表示されます。

ただし、フレームから切り替えてフレームに戻るe.g. (via button actions) AddStudent frame-> NewFrame -> AddStudent frameと、コンボボックスは空で表示され、配列はロードされていません。

「NewFrame」フレームから「AddStudent」フレームに切り替えるボタン

 private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       

        ComboboxFrame CF = new ComboboxFrame();
        CF.setVisible(true);
        setVisible(false);

    }

配列をコンボボックスにロードするために使用される「AddStudent」フレームのコーディング

public class AddStudent extends javax.swing.JFrame {

    /**
     * Creates new form AddStudent
     */
public AddStudent() 
{
    initComponents();
}

    List<String> sundayList;
    List<String> mondayList;
    List<String> tuesdayList;
    List<String> wednesdayList;
    List<String> thursdayList;

    private void loadLists() throws IOException
    {
        //Creating the array of Activities to put into the ComboBoxes
        File f = new File("Activities.dat");

        sundayList = new ArrayList<>();
        mondayList= new ArrayList<>();
        tuesdayList= new ArrayList<>();
        wednesdayList= new ArrayList<>();
        thursdayList= new ArrayList<>();

        try{
            BufferedReader reader = new BufferedReader(new FileReader(f));

            while(reader.ready())
            {
                String CDay = reader.readLine();                               
                String CActivityName = reader.readLine();
                String CSupervisor = reader.readLine();
                String CLocation = reader.readLine();
                String CPaid = reader.readLine();
                String nothing = reader.readLine();

                if(CDay.equals("Sunday"))
                {
                    sundayList.add(CActivityName);
                }
                else if(CDay.equals("Monday"))
                {
                    mondayList.add(CActivityName);
                }
                else if(CDay.equals("Tuesday"))
                {
                    tuesdayList.add(CActivityName);
                }
                else if(CDay.equals("Wednesday"))
                {
                    wednesdayList.add(CActivityName);
                }
                else if(CDay.equals("Thursday"))
                {
                    thursdayList.add(CActivityName);
                }                
            }
            sundayList.add("-");
            mondayList.add("-");
            tuesdayList.add("-");
            wednesdayList.add("-");
            thursdayList.add("-");
            reader.close();

        }
        catch (IOException ex) 
        {
            Logger.getLogger(StartUpFrame.class.getName()).log(Level.SEVERE, null, ex);
        } 
               comboboxSunday.setModel(new DefaultComboBoxModel<>(sundayList.toArray(new String[sundayList.size()])));
               comboboxMonday.setModel(new DefaultComboBoxModel<>(mondayList.toArray(new String[mondayList.size()])));
               comboboxTuesday.setModel(new DefaultComboBoxModel<>(tuesdayList.toArray(new String[tuesdayList.size()])));
               comboboxWednesday.setModel(new DefaultComboBoxModel<>(wednesdayList.toArray(new String[wednesdayList.size()])));
               comboboxThursday.setModel(new DefaultComboBoxModel<>(thursdayList.toArray(new String[thursdayList.size()])));
    }
...
...
...
    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AddStudent addStudent = new AddStudent();
                    addStudent.loadLists();
                    addStudent.setVisible(true);                                   
                } catch (IOException ex) {
                    Logger.getLogger(AddStudent.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

}
4

1 に答える 1

0

ボタンをクリックすると、新しい Frame が作成されているように見えます。新しいフレームは元のフレームと要素 (コンボ ボックスなど) を共有していますか? Java Swing は、再利用できるものと再利用できないものについてかなりうるさいです。基本的なガイドラインとして、モデルは安全に再利用できますが、JComponents は独立して存在する必要があります (つまり、フレーム間でモデルを共有できますが、JComponents 自体は共有できません)。

于 2013-03-12T12:12:09.090 に答える