在for循环中创建一个对象,并尝试在其他地方访问它

时间:2015-06-30 22:48:20

标签: java jcheckbox

我正在尝试制作一个改组音乐的程序。我已经获得了导入的所有歌曲,现在我正在尝试为每首歌创建一个``JCheckBox。我有一个for循环创建这些复选框,但我需要一种方法来测试框是否被选中。我已经在使用if(box.isSelected()),但是需要识别哪个框,并且需要访问for循环外的框。 这是我的代码。 顺便说一下,songsArrayList

public static void checkboxList() {
    ArrayList<JCheckBox> checkboxes = new ArrayList<>();

    for (String element : songs) {
        System.out.println("Reached checkbox thing");
        System.out.println(element);
        JCheckBox box = new JCheckBox(element);
        checkboxes.add(box);
        panel.add(box);
        frame.pack();
    }
    int loop = 0;
    while (loop == 0) {
        if (checkboxes.contains(box.isSelected())) {

        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果您需要唯一标识符,为什么不创建自己的JCheckbox?

类似的东西:

 public class MyCheckBox extends JCheckBox {

 public MyCheckBox(paramOne, paramTwo, paramN) {
     super();    
    //do stuff with the unique identifiers 
 }

 //inherit all methods from super class
 @Override
 public boolean isSelected() {
     return super.isSelected();
 }

  //ETC...
 }

答案 1 :(得分:0)

正如大家所说,你可以添加一个事件监听器来识别生成事件的对象。

public class evttest implements ItemListener{

//Declared your arraylist checkboxes global. To access it in other part of code
static ArrayList<JCheckBox> checkboxes ;

public evttest(){

...

checkboxList();
//After calling checkboxesList() call add method to add itemlistener to each of them
this.add();
}


public static void checkboxList() {
checkboxes = new ArrayList<>();
JCheckBox box;

for (String element : songs) {
    System.out.println("Reached checkbox thing");
    System.out.println(element);
    box = new JCheckBox(element);

    checkboxes.add(box);
    panel.add(box);
    frame.pack();
}

frame.getContentPane().add(panel);
}

//this method adds ItemListener to all the 
//checkboxes you have in your ArrayList checkboxes
public void add(){
    for(JCheckBox cb : checkboxes){
        cb.addItemListener(this);
    }
}



@Override
public void itemStateChanged(ItemEvent e) {

    //If the item is selected then do something
    if(e.getStateChange() == ItemEvent.SELECTED){

        //cb is the checkbox on which your event occured.
        //You can then use cb to perform your required operation

        JCheckBox cb = (JCheckBox)e.getSource();
        System.out.println("clicked item is: " + cb.getText());
    }
}

public static void main(String...args){
    new evttest();
    }


}