当尝试将我的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。
答案 0 :(得分:0)
jList5.getSelectedValue()
获得的字符串类似于"asd"
而不是"123"
在将其解析为int之前,请先检查您获得的值是什么。
答案 1 :(得分:0)
根据您的上下文代码,
int id = Integer.parseInt(jList5.getSelectedValue());
会导致编译错误
Integer#parseInt
需要String
值,但您的ListModel明确将其内容定义为Object
(DefaultListModel<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);
}
}