0

私はJavaが初めてで、簡単な答えが必要だと確信しているものに苦労していますが、それを見つけることができないようです。次のように定義されたチェックボックスオブジェクトの配列があります。

ArrayList<JCheckBox> checkBoxList

JPanel がグリッド レイアウトで作成され、チェックボックスが JPanel と ArrayList に追加されます。

for (int i = 0; i < 256; i++) {
    JCheckBox c = new JCheckBox();
    c.setSelected(false);
    checkBoxList.add(c);
    mainPanel.add(c);
 }

はい、256 個のチェックボックスがあります。パネルが JFrame に追加され、最終的に GUI が表示されます。ユーザーは、256 個のチェックボックスを任意に組み合わせて選択できます。

私のクラスは Serializable を実装しており、このチェックボックスの ArrayList は、「保存」および「読み込み」GUI ボタン​​を使用して保存および復元できます。保存されたオブジェクトをロードする私のコードは次のとおりです。

public class LoadListener implements ActionListener {

    public void actionPerformed(ActionEvent a) {

        try {

            // Prompt the user for a load file
            JFileChooser fileLoad = new JFileChooser();
            fileLoad.showOpenDialog(mainFrame);

            // Create a object/file input stream linking to the selected file 
            ObjectInputStream is = new ObjectInputStream(new FileInputStream(fileLoad.getSelectedFile()));

            // Read the checkBox array list
            checkBoxList = (ArrayList<JCheckBox>) is.readObject();              
            is.close();

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

ArrayList オブジェクトをロードすると、チェックボックスの値が正しく入力されますが、これを反映するように GUI のチェックボックスを更新したいと考えています。これを行う簡単な方法はありますか?チェックボックスの配列には正しい値があり、パネル/フレームを再描画できると思いましたが、これは機能しません。理由を知りたいのですが、読み込まれたチェックボックス オブジェクトの配列が GUI 上のチェックボックス オブジェクトを反映しなくなったのでしょうか。どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

0

あなたの問題は参照の問題だと思います。読み取られる ArrayList オブジェクトには、保存時にメモリ内にあった JCheckBox の参照のみが格納されます。したがって、ArrayList オブジェクト全体をファイルに書き込む代わりに、JCheckBoxes の状態 (true または false) を保存し、それらを読み戻すときに、次のように状態を手動で設定します。

//write the states
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("path"));
Iterator<JCheckBox> i=checkBoxList.getIterator();
while(i.hasNext())
{
JCheckBox box=i.next();
oos.writeBoolean(box.isSelected());
}
oos.close();

JCheckBoxes がすでにインスタンス化されており、配列リストに適切に配置されている場合は、保存したファイルの読み取り中に次の操作を行います。

 // Create a object/file input stream linking to the selected file 
        ObjectInputStream is = new ObjectInputStream(new FileInputStream(fileLoad.getSelectedFile()));

for(int i=0;i<256;++i)
checkBoxList.get(i).setSelected(is.readBoolean());
于 2013-10-28T21:59:45.747 に答える