java error - 尝试将jList.getSelectedValue()转换为int

时间:2018-03-13 01:16:26

标签: java jlist

当尝试将我的jList中的选定值转换为int时,我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

我尽可能地调试了代码,问题似乎出现在int id = Integer.parseInt(jList5.getSelectedValue());。我在程序的其余部分做了类似的事情没有错误,我不知道这次出了什么问题。

       import javax.swing.DefaultListModel;
       import javax.swing.JOptionPane;


       if(jList5.getSelectedValue() != null){
           int id = Integer.parseInt(jList5.getSelectedValue());
           Main.oa.DeleteOrder(id);
       } else {
           JOptionPane.showMessageDialog(rootPane, "ERROR: No value selected");
       }


        DefaultListModel modelID = new DefaultListModel<Object>();
        for (int i = 0; i < Main.oa.getTop() ; i++) 
            modelID.addElement(Main.oa.currentOrders[i].getID());
        jList5.setModel(modelID);

DeleteOrder()意味着接受一个int。

2 个答案:

答案 0 :(得分:0)

jList5.getSelectedValue()获得的字符串类似于"asd"而不是"123" 在将其解析为int之前,请先检查您获得的值是什么。

答案 1 :(得分:0)

根据您的上下文代码,

int id = Integer.parseInt(jList5.getSelectedValue()); 

会导致编译错误

Integer#parseInt需要String值,但您的ListModel明确将其内容定义为ObjectDefaultListModel<Object>),这意味着JList#getSelectedValue将返回Object

假设Main.oa.currentOrders[i].getID()返回int,那么实际上您实际上是在尝试将int投放到String以满足Integer.parseInt的需求......这有点奇怪。

相反,让模型符合数据的要求

DefaultListModel<Integer> modelID = new DefaultListModel<Integer>();

并在JList s

上将Integer定义为支持模型
jList5 = new JList<Integer>();

这样,getSelectedValue将返回Integer

例如......

import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                DefaultListModel<Integer> model = new DefaultListModel<>();
                for (int index = 0; index < 100; index++) {
                    model.addElement(index);
                }
                JList<Integer> list = new JList<>(model);
                list.addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        deleteOrder(list.getSelectedValue());
                    }
                });
                JFrame frame = new JFrame("Testing");
                frame.add(new JScrollPane(list));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public void deleteOrder(int id) {
        System.out.println("ID = " + id);
    }
}