它是一个带有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);
(请记住-它仍然是同一实例)。