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
定义为Integer
s
上的支持模型
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);
}
}
尝试将我的 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
定义为Integer
s
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);
}
}