它是一个带有256个复选框的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();
}
恢复checkBox的值而不是它将调用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();
}
比我查看这本书并找到了这段代码。即使在互联网和论坛上搜索checkBoxs,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);
}
但左侧的任务正在影响右侧的价值。
答案 0 :(得分:1)
JCheckBox
是参考类型。
当您执行任务声明时:
someVariable = someValue;
如果双方都是参考类型,那么真的很酷。
引用类型变量存储对实际对象的引用,即复选框本身。上述声明指定someValue
对someVariable
持有的引用。换句话说,它使someVariable
和someValue
引用同一个对象。
现在进入这一行
JCheckBox check = (JCheckBox) checkBoxList.get(i);
正如我所说,check
和checkBoxList.get(i)
现在将引用相同的复选框,因为它们是引用类型变量。当你说:
check.setSelected(true);
相当于:
checkBoxList.get(i).setSelected(true);
因为两个变量引用相同的复选框。
答案 1 :(得分:0)
它会影响该值,因为当您执行check
时,您会为checkBoxList.get(i)
实例分配check.setSelected(true);
引用。然后你在那个实例上执行{{1}}(记住 - 它仍然是同一个实例)。