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

java error - Trying to convert jList.getSelectedValue() to int

尝试将我的 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() 是为了接受一个整数。

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

根据您的 out-of-context 代码,

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

会导致编译错误

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

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

取而代之的是让模型符合数据的要求

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

并将JList定义为Integers

上的支持模型
jList5 = new JList<Integer>();

这样,getSelectedValue 将 return 一个 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);
    }
}