При попытке преобразовать выбранное значение из моего 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 ответа
На основе вашего кода вне контекста,
int id = Integer.parseInt(jList5.getSelectedValue());
Вызовет ошибку компилятора
Integer#parseInt
ожидает значение String
, но ваша ListModel четко определяет его содержание как Object
(DefaultListModel<Object>
), что означает, что JList#getSelectedValue
вернет {{X5 }}
Если предположить, что Main.oa.currentOrders[i].getID()
возвращает int
, то на самом деле вы пытаетесь преобразовать int
в String
для удовлетворения потребностей Integer.parseInt
... что немного странно.
Вместо этого получите модель в соответствии с требованиями данных
DefaultListModel<Integer> modelID = new DefaultListModel<Integer>();
И определите JList
как поддерживающие модели на Integer
s
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);
}
}
jList5.getSelectedValue()
получает строку вида "asd"
вместо "123"
Попробуйте сначала проверить, какое значение вы получаете, прежде чем преобразовывать его в int.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].