它是一个带有256个checkBox的beatBox程序,可以进行跟踪并运行它。
使用start,stop,loadTrack和saveTrack选项。
当我们单击开始按钮时,它将遍历所有复选框并对其进行跟踪。以下是通过JFileChooser和FileInput Stream恢复checkBoxes值的代码。

void buildAndStartTrack(){

ArrayList checkBoxList = new ArrayList<JCheckBox>();
for ( int i=0; i<256; i++)
    {
        JCheckBox c = new JCheckBox();
        c.setSelected(false);
        checkBoxList.add(c);
        mainPanel.add(c);
    } // end loop
  }
//here some more code to maketracks and start sequencer
}

public class MyObjectLoadListener implements ActionListener{
    public void actionPerformed(ActionEvent event)
    {
        JFileChooser fileLoad = new JFileChooser();
        fileLoad.showOpenDialog(theFrame);
        LoadedFile(fileLoad.getSelectedFile());

    }
}

public void LoadedFile(File file)
{
    boolean [] checkBoxState = null;

    try
    {
        FileInputStream fileIn = new FileInputStream(file);
        ObjectInputStream is = new ObjectInputStream(fileIn);
        checkBoxState = (boolean[]) is.readObject();
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }


恢复checkBoxes的值,然后它将调用buildAndStartTrack

//how i did it myself (It has a bug but its working fine)
for (int i=0; i<256; i++)
    {
        JCheckBox check = new JCheckBox();
        if(checkBoxState[i])
        {
            check.setSelected(true);
            checkBoxList.set(i, check);
        }
        else
        {
            check.setSelected(false);
            checkBoxList.set(i, check);
        }
    }

    sequencer.stop();
    buildTrackAndStart();
}


然后我看了一下书,发现了这段代码。即使经过两天在互联网和论坛上搜索复选框,arraylist主题,我仍然无法得到它。

for (int i=0; i<256; i++)
    {
        JCheckBox check = (JCheckBox) checkBoxList.get(i);
        if(checkBoxState[i])
        {
            check.setSelected(true);  // here doubt
 // check is on left handside
 // so changing its value shouldn't effect value on right hand side i.e    checkBoxList.get(i)
        }
        else
        {
            check.setSelected(false);
        }


但是左侧的分配影响右侧的价值。

最佳答案

这将影响该值,因为执行JCheckBox check = (JCheckBox) checkBoxList.get(i);时,您将为check实例分配给checkBoxList.get(i)引用。然后,您在该实例上执行check.setSelected(true);(请记住-它仍然是同一实例)。

07-24 09:46