【问题标题】:Error: The type of the expression must be an array type but it resolved to boolean错误:表达式的类型必须是数组类型,但它解析为布尔值
【发布时间】:2019-07-16 22:13:52
【问题描述】:

我有 6 个按钮和 6 个布尔值,Actionhandler 应该使布尔值,即它的按钮,如果它被单击,则为 true。为了更容易,我创建了一个 boolean[] 数组,但是 setter 函数给出了错误:

"表达式的类型必须是数组类型,但解析为布尔值";

我需要在 ActionListener 的 setter 中设置什么?

我试过了:

  • Var.setKo(true);
  • Var.setKo(true[i]);
  • Var.setKo(boolean[i] true);
  • 等等


        public class Gui {

    static JButton ko[] = new JButton[6];

    public Gui() {

        int y=0;
        for (int i = 0; i < ko.length; i++) {
            ko[i] = new JButton();
            ko[i].addActionListener(new ActionHandler());
            ko[i].setBorder(bor);
            if(i==0||i==2||i==4) {
                ko[i].setBounds(650, 200+60*y, 250, 30);
            }else {
                ko[i].setBounds(950, 200+60*y, 250, 30);
                y++;
            }
            jfMenu.add(ko[i]);

        }
    }

    public static JButton[] getKo() {
        return ko;
    }

    public static void setKo(JButton[] ko) {
        Gui.ko = ko;
    }


}

public void actionPerformed(ActionEvent e) {

    for (int i = 0; i < Var.getKo().length; i++) {
        if(e.getSource() == Var.getKo()) {
            Var.setKo(true[i]);
        }else {
            Var.getKo()[i] = false;
        }
    }

}

public class Var {

    static boolean ko[] = new boolean[6];

    public Var() {

        for (int i = 0; i < ko.length; i++) {
            ko[i] = false;
        }

    }
    public static boolean[] getKo() {
        return ko;
    }

    public static void setKo(boolean[] ko) {
        Var.ko = ko;
    }
}


【问题讨论】:

  • 第一个 Code 是变量类,其中声明了布尔值并设置默认为 false ;第二个在 ActionListener 中,它包含问题;第三个只是为了理解我有 6 个按钮,它们都有自己的布尔值
  • 您还没有展示ko 是如何声明的,但它必须是JButton 或其某个超类的数组,否则您将无法像您一样分配给它.因此,您不能将其作为布尔数组返回,并且您永远不会希望有一个替换整个数组的设置器,因为您会丢失对按钮的引用。此外,true[i] 并不接近有效;布尔值不是数组,不能下标。
  • @DavidConrad 我添加了更多代码,希望它能帮助您(和其他人)理解我制作的垃圾;我没有比布尔值更好的解决方案,是否有另一种方法可以识别按钮是否被按下?

标签: java arrays boolean getter-setter


【解决方案1】:

这里不需要使用setter,你的数组已经存在,已经初始化,不需要重新设置。

您需要改变一些索引的值。这可以通过使用 getter 来获取对数组的引用,然后选择正确的索引并为其分配一个值。

如下所示

public void actionPerformed(ActionEvent e) {
    for (int i = 0; i < Var.getKo().length; i++) {
        Var.getKo()[i] = e.getSource() == Var.getKo();
    }
}

【讨论】:

  • 感谢您的帮助,我解决了它,还有一个小错误,现在它确实可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 2018-09-16
  • 2021-07-24
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多