Создать поле ввода управления булевыми значениями - PullRequest
0 голосов
/ 14 марта 2020

Я уже некоторое время пытаюсь использовать поле ввода, например, когда пользователь вводит «активировать ТВ», которое затем отображает статус телевизора в строке, например, в начальной строке «ТВ (нет)». «превращается в« тв (да) »после ввода пользователем« активировать тв »и наоборот, когда пользователь вводит« деактивировать тв », строка должна обновиться и сказать« тв (нет) ».

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

//USING A BOOLEAN FOR (YES) / (NO)
boolean status = false;
String stat;
if (status == false) {
    stat = "(no)";
}else {
    stat = "(yes)";
}

//CREATES AN ARRAY OF SIZE INPUTTED BY THE USER
String[] Item = new String[amount];
for (int i = 0; i < Item.length; i++) {
    Item[i] = showInputDialog("Please enter item?");
}

System.out.print("The available items are: ");
//PRINTS THE INPUT BY THE USER FROM ARRAY TO CONSOLE
String joinedString = String.join(stat+", ", Arrays.asList(Items));
System.out.print(joinedString);
System.out.print(sta);

//I DON'T KNOW HOW I COULD USE THIS INPUT DIALOG TO ACTIVATE AND DEACTIVATE THE ITEMS IN THE ARRAY
String input = showInputDialog("activate / deactivate?");

Буду признателен за любые предложения о том, как я могу решить эту проблему, так как я новичок в java.

1 Ответ

1 голос
/ 17 марта 2020

Я хотел бы решить эту проблему следующим образом:

  1. Создайте собственный класс для отслеживания всех элементов, ItemManager.
  2. ItemManager следует содержит HashMap, что позволяет хранить <key, value> пар. Это позволит сохранить элемент и его статус вместе. Мы будем использовать имя каждого элемента в качестве ключа (это будет строка) и статус каждого элемента в качестве значения (это будет логическое значение). Поэтому мы определяем HashMap<String, Boolean>. Поскольку в этом HashMap хранится имя каждого элемента, нам больше не нужно хранить их в массиве, который вы упомянули ранее (чтобы получить список всех элементов, которые мы могли бы просто использовать hashMap.keySet().toArray()). Последнее преимущество HashMap состоит в том, что количество элементов может расти бесконечно, вы не ограничены числом, которое вводит пользователь, как в случае с массивом.
  3. ItemManager должны иметь запросы, позволяющие вам добавить элемент (с состоянием по умолчанию false), добавить элемент с пользовательским состоянием, проверить, существует ли элемент, и обновить состояние элемента.
  4. Запросив, активен ли элемент, вы можете затем определите, что должен содержать текст в поле вывода.
import java.util.HashMap;

public class ItemManager {

    private HashMap<String, Boolean> itemMap;
    private final Boolean DEFAULT_STATUS = false;

    ItemManager(){
       itemMap = new HashMap<String, Boolean>();
    }

    // Add a new item with a given name and default status (False)
    public void addItem(String name) {
        itemMap.put(name, DEFAULT_STATUS);
    }

    // Add a new item with a given name and custom status
    public void addItem(String name, Boolean status) {
       itemMap.put(name, status);
    }

    // Check whether an item exists
    public Boolean itemExists(String name) {
        if (getStatus(name) == null) {
            return false;
        } else {
            return true;
        }
    }

    // Remove an item with given name
    public void removeItem(String name) {
        itemMap.remove(name);
    }

    // Update the status of an existing item. Note this uses the same .put method so we simply call addItem()
    public void setStatus(String forItem, Boolean status) {
        addItem(forItem, status);
    }

    // Get the status of a given item
    public Boolean getStatus(String forItem) {
        return itemMap.get(forItem);
    }

}

Очевидно, что при использовании класса ItemManager вам необходимо быть внимательным, чтобы проверить, существует ли элемент, прежде чем обновлять статус (в противном случае setStatus() все равно просто создаст элемент - обратите внимание, как он вызывает addItem() - причина этого в том, что HashMap.put() добавляет новую пару <key, value>, если ключ не существует в пределах HashMap, или обновляет значение для ключа, если он существует). В идеале вы должны реализовать обработку ошибок, чтобы updateStatus() выдавал ошибку, если элемент еще не существует, однако обработка ошибок - более продвинутая топи c, поэтому ее стоит сохранить в будущем.

Чтобы проиллюстрировать вышеизложенное, мой класс View делает следующее:

...
case "activate":
    itemName = activateItemTextField.getText();
    activateItemTextField.setText("");
    if (itemManager.itemExists(itemName)) {
        itemManager.setStatus(itemName, true);
        outputLabel.setText(itemName + "(yes)");
    } else {
        outputLabel.setText("Item doesn't exist!");
    }
    break;
...

Это оставляет меня с чем-то следующим. Извиняюсь за плохой вид - прошло много времени с тех пор, как я использовал Swing и спешил.

enter image description here enter image description here enter image description here

...