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