2013-01-02 58 views
0

您好,我試圖獲取數組中的複選框列表的所有檢查項目索引。但顯然該方法getCheckBoxListSelectedIndices();將返回一個空數組獲取JCheckListBox的所有檢查項目索引

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]); 
    } 
} 

這是我得到的exeption:

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

'List = new CheckBoxList(); CheckBoxList List = new CheckBoxList();'那是什麼? –

+0

不要打電話給你從大寫字母字段 –

回答

1

問題看起來很簡單。你有實例變量和方法變量都是相同的。 列表被聲明爲實例變量,並在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中,數組索引被強烈檢查。

+0

oups對不起我的壞:) – user1912404

+0

糾正該行應該解決您的問題。請檢查。 – pratikch

+0

thx尋求幫助 – user1912404