创建输入框控件布尔值

Create an input box controls booleans

我已经尝试了一段时间,使用输入框,例如用户输入 "activate tv",然后在一行中显示电视的状态,例如初始行是 "tv(no)" 在用户输入 "activate tv" 后变为 "tv(yes)",反之亦然,当用户输入 "deactivate tv" 时,该行应该更新并显示 "tv(no)"。

我想像我一样使用一个数组来表示用户在开始时可以输入的项目数量,但我不知道如何解决这个问题来为用户输入的每个项目的状态创建一个数组并且可以由用户使用输入框 activated/deactivated。

//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. 创建自定义 class 以跟踪所有项目,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 class 时,您必须在更新状态之前仔细检查该项目是否存在(否则 setStatus() 无论如何都会创建该项目- 注意它是如何调用 addItem() - 这样做的原因是 HashMap.put() 添加一个新的 <key, value> 对,如果键不存在于 HashMap 中,或者更新值对于密钥,如果它确实存在)。理想情况下,您将实施错误处理,以便 updateStatus() 在项目尚不存在时抛出错误,但错误处理是一个更高级的主题,因此可能值得为将来保存。

为了说明上述观点,我的视图 class 执行以下操作:

...
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 了所以我匆匆忙忙。