您好我正在尝试获取数组中复选框列表的所有选中项目索引。但显然方法是getCheckBoxListSelectedIndices();正在返回一个空数组
package cct.karim;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.jidesoft.swing.CheckBoxList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
/**
*
* @author beastieux
*/
public class E_JCheckListBox extends JFrame implements ActionListener {
protected JLabel loglabel;
private CheckBoxList List;
public E_JCheckListBox()
{
super("Select RFQs to Export");
loglabel=new JLabel("Log: .");
List=new CheckBoxList();
CheckBoxList List = new CheckBoxList();
JScrollPane scp=new JScrollPane();
DefaultListModel lmdlEjemplo=new DefaultListModel();
lmdlEjemplo.addElement(" Item 0 ");
lmdlEjemplo.addElement(" Item 1 ");
lmdlEjemplo.addElement(" Item 2 ");
lmdlEjemplo.addElement(" Item 3 ");
lmdlEjemplo.addElement(" Item 4 ");
lmdlEjemplo.addElement(" Item 5 ");
lmdlEjemplo.addElement(" Item 6 ");
lmdlEjemplo.addElement(" Item 7 ");
lmdlEjemplo.addElement(" Item 8 ");
lmdlEjemplo.addElement(" Item 9 ");
List.setModel(lmdlEjemplo);
scp.add(List);
this.add(scp);
scp.getViewport().add(List);
getContentPane().setLayout(new FlowLayout());
this.setSize(300, 300);
scp.setSize(300, 350);
JPanel p = new JPanel();
p.setSize(500, 500);
p.setLayout(new BorderLayout());
p.add(scp, BorderLayout.CENTER);
p.add(loglabel, BorderLayout.SOUTH);
p.setBorder(new TitledBorder(new EtchedBorder(),
"Please select options:") );
getContentPane().add(p);
JButton k= new JButton("Export");
k.addActionListener(this);
k.setMaximumSize(new Dimension(1, 1));
add(k);
// pack();
setVisible(true);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
E_JCheckListBox obj = new E_JCheckListBox();
obj.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
int k[]=List.getCheckBoxListSelectedIndices();
System.out.println(k[0]);
}
}
这是我得到的例外:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at cct.karim.E_JCheckListBox.actionPerformed(E_JCheckListBox.java:92)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我错过了什么,因为我不熟悉GUI编程吗?
答案 0 :(得分:1)
问题似乎很简单。实例变量和方法变量的名称相同。 List被声明为实例变量并在ActionListner中使用,但是同样用于创建局部变量,因此本地在构造函数中具有首选项。
下面的错误代码应该正常工作。
private CheckBoxList List;
public E_JCheckListBox()
{
super("Select RFQs to Export");
loglabel=new JLabel("Log: .");
List=new CheckBoxList();
// CheckBoxList List = new CheckBoxList();
JScrollPane scp=new JScrollPane();
另外,请在访问元素之前添加数组中的长度检查。在Java中,强烈检查数组索引。