Как получить Jlist выбранное значение - PullRequest
0 голосов
/ 28 октября 2019

Я пишу калькулятор чаевых. Вы должны выбрать «качество обслуживания», которое изменит процент чаевых.

Я пробовал Jlist.getSelectedValue (), и я продолжаю получать ту же ошибку: Исключение в потоке «AWT-EventQueue-0» Java. lang.NullPointerException

jList1 = new javax.swing.JList<>();
String bill = jTextField1.getText();
        double realBill = Double.parseDouble(bill);
        String people = jTextField2.getText();
        int noOfPeople = Integer.parseInt(people);
        String selectQual= jList1.getSelectedValue();
        String[] strings = { "PERFECT 20%", "GOOD 15%", "NOT BAD 10%", "BAD 5%", "TRASH 0%" };
        int s = 0;
double servQual = 0;
        for (int i=0;i<4;i++){
            if (selectQual.equals(strings[i])){
                s = i;
                break;
            }
        }
        switch(s){
            case 0: servQual=0.2;
            break;
            case 1: servQual=0.15;
            break;
            case 2: servQual=0.1;
            break;
            case 3: servQual=0.05;
            break;
            case 4: servQual=0;
            break;
        }

        double finalCheck = (realBill*(1+servQual))/noOfPeople;
        DecimalFormat df = new DecimalFormat("#.##");
        JOptionPane.showMessageDialog(null,"Each person has to pay "+ df.format(finalCheck));
        JOptionPane.showMessageDialog(null,selectQual);

Я ожидаю получить окончательный счет на человека в диалоговом окне. Однако указанная ошибка продолжает появляться.

1 Ответ

0 голосов
/ 29 октября 2019

Вы звоните getSelectedValue(), прежде чем когда-либо устанавливать выбранное значение или даже заполнять список любыми значениями (по крайней мере, насколько показывает ваш опубликованный код).

Я предполагаю, что значения в массиве strings - это значения, которыми вы хотите заполнить свой список. Инициализируйте strings перед тем, как инициализировать список, который затем инициализируйте следующим образом: jList1 = new JList(strings);.

Затем вы инициализируете строку selectedQual до того, как будет выбрано значение. Есть несколько возможных решений для этого, в зависимости от того, что вам нужно. Если вы хотите, чтобы в списке было выбранное по умолчанию значение (читай: «уже заполнено при инициализации диалога»), вызовите jList1.setSelectedValue("the value you want selected") или jList1.setSelectedIndex("the index of the value you want selected"). Если вы хотите, чтобы он был пустым, просто оставьте его как есть.

Теперь в любом случае вы хотите, чтобы getSelectedValue() вызывался только после того, как форма заполнена и пользователь выполняет какое-то действие (я предполагаю,какая-то кнопка «Подтвердить»). Итак, какое бы действие ни выполнялось, которое закрывает форму и обрабатывает значения, именно здесь вы вызываете getSelectedValue(), потому что в этот момент оно должно быть установлено.

Если вы выберете пустое поле при инициализации, возможно, имеет смысл включить здесь какую-то проверку нуля, например java if(getSelectedValue() != null) {String selectedQual = jList1.getSelectedValue();} else {System.out.println("Error: No Tip percentage has been selected!");} Обратите внимание, что вы, вероятно, хотите проверить свои значения иначе, чем просто System Outprinting некоторой строки, но это не такчасть этого вопроса.

Надеюсь, это решит ваши проблемы!

...