При попытке преобразовать выбранное значение из моего 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
choreley 13 Мар 2018 в 04:16

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);
    }
}
0
MadProgrammer 13 Мар 2018 в 01:39

jList5.getSelectedValue() получает строку вида "asd" вместо "123" Попробуйте сначала проверить, какое значение вы получаете, прежде чем преобразовывать его в int.

0
user6113352user6113352 13 Мар 2018 в 01:21