开发者社区> 问答> 正文

创建一个输入框控件布尔

我一直在尝试使用输入框,例如,用户输入“ activate tv”,然后在一行上显示电视的状态,例如,初始行是“ tv(no)”,用户输入“激活电视”后显示“ tv(yes)”,反之亦然,当用户输入“停用电视”时,该行应更新并显示“ tv(no)”。

我想使用一个数组,就像用户开始时可以输入的项目数量一样,但是我不知道如何解决该问题,以便为用户输入的每个项目的状态创建一个数组,并可以将其激活/由用户使用输入框停用。

//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的初学者,所以我对如何解决此问题的任何建议将不胜感激。

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 13:35:38 451 0
1 条回答
写回答
取消 提交回答
  • 我要解决此问题的方法如下:

    1. 创建一个自定义类来跟踪所有项目ItemManager。
    2. ItemManager应该包含HashMap,以允许<key, value>存储对。这将允许项目及其状态一起存储。我们将每个项目的名称用作键(这将是一个字符串),并将每个项目的状态用作值(这将是一个布尔值)。因此,我们定义一个HashMap<String, Boolean>。因为我们将每个项目的名称存储在this中HashMap,所以我们不再需要将它们存储在您前面提到的数组中(以获取我们可以简单使用的所有项目的列表hashMap.keySet().toArray())。a的最终优点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()在该项目尚不存在时抛出错误,但是错误处理是更高级的主题,因此值得将来保存。

    为了说明以上几点,我的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以来已经很久了,我把它赶到一起。

    回答来源:Stack Overflow

    2020-03-26 13:43:14
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载