Как взять данные (идентификатор товара, названия товара, цену товара) из файла с FileChooser и идентификатором списка в выпадающем списке?Как сопоставить метки с выбором? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь сделать точку продажи терминалом.Мне нужно прочитать чтение (идентификатор товара, названия товара и цену товара) из текстового файла с FileChooser.Затем itemID должен быть указан в поле со списком.Выбор comboBox должен изменить метки и цены на соответствующее название товара и цену товара.Я считаю, что это связано со свойствами и связыванием, но я не понимаю, как их использовать.

Я попытался создать класс Items, я попытался прочитать файл в три массива и затем сравнить массив IDэлемент в поле со списком, а затем переключение текста метки на элемент массива имен с той же позицией.

stage.setTitle("Open Resource File");
    FileChooser fileChooser = new FileChooser();
    try { 
        FileReader reader = new 
FileReader(fileChooser.showOpenDialog(stage));
        Scanner scanner = new Scanner(reader);
        for (int i = 0; i < 10; i++) {
            itemID[i] = scanner.next();
            itemName[i] = scanner.next();
            itemPrice[i] = scanner.nextDouble();
        }
        scanner.close();
        reader.close();
        }
    catch (Exception FileNotFoundException) {

    }



Items item = new Items();
    ComboBox idBox = new ComboBox();
    idBox.setPromptText("Select an item");
    idBox.getItems().addAll("A", "B", "C", "D", "E", "F", "G", "H", "I", 
"J");
    idBox.setOnAction(e -> {
        item.setName(idBox.getValue().toString(), itemID, itemName);
        item.setPrice(idBox.getValue().toString(), itemID, itemPrice);
        nameLbl.setText(item.name.toString());
    });

    double quantity;
    Label idLabel = new Label("Item ID: ");
    Label nameLabel = new Label("Item Name: ");
    Label nameLbl = new Label(item.name.toString());
    Label priceLabel = new Label("Item Price: ");
    Label priceLbl = new 
Label(NumberFormat.getCurrencyInstance(newLocale("en", 
"US")).format(item.price));    
    Label priceLbl = new Label("");

Program compiles and main window opens but shows error and crashes when 
it tries to create the point of sales terminal window.

1 Ответ

0 голосов
/ 15 июня 2019

Итак, есть ряд вещей, которые вы захотите рассмотреть, в них не будет содержаться весь код, но этого должно быть достаточно, чтобы начать работу.

1) ВыВы захотите отсканировать свои Предметы в ObservableList<Item>, чтобы они были в едином Списке для работы.Как минимум, вы можете сделать что-то вроде этого в вашей for:

String id = scanner.next();
String name = scanner.next();
String price = scanner.nextDouble();
items.add(new Item(id, name, price));

, хотя вы, вероятно, хотите сделать цикл внутри сканера немного более динамичным (вместо 10) - возможно, используйте цикл whileили другой читатель.

2) Теперь, когда у вас есть список предметов, вы хотите использовать ComboBox<Item> cbItems = new ComboBox<Item>() для отображения.Вам нужно будет установить cbItems.setCellFactory(...) и cbItems.setButtonFactory(...), чтобы в раскрывающемся списке отображался идентификатор или имя.Список ObservableList, к которому вы добавили, может быть установлен на cbItems.setItems(items), описанный в (1).Об этом написано множество SO статей, поэтому я опущу полный код.

3) Выбор дилеров, хотите ли вы использовать ObjectProperty<Item> или cbItems.selectedProperty() для привязки ктекстовые поля, которые вы используете.рекомендую начать с используемого вами сейчас обработчика изменений и установить метки непосредственно с помощью item.getName(), а после того, как вы получите этот рабочий режим, перейти к lblName.textProperty().bind(Bindings....).

Что касается ошибки,Вы не опубликовали достаточно информации (что является исключением или полный код для репликации), поэтому я не могу помочь в этом.Но если вы исследуете пункты выше, вы должны быть ближе.

...