【问题标题】:JButton changing color when pressedJButton在按下时改变颜色
【发布时间】:2018-09-28 20:39:38
【问题描述】:

我一直收到同样的错误:“cBtn 无法解析为变量”

    public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Butt1");
        JButton btn = new JButton("Change color");
        frame.add(btn);
        btn.setBackground(cBtn);
        frame.setSize(250, 100);
        frame.setVisible(true);
    }
    Color[] colors = new Color[] { Color.red, Color.orange, Color.yellow, Color.green, Color.blue,
            new Color(075, 000, 130), new Color(128, 000, 128)};
    int color;
    public void actionPerformed(ActionEvent e) {
        Color cBtn = (colors[color++ % colors.length]);
    }
}

提前致谢!

【问题讨论】:

  • cBtn 是一个局部变量 -> 只能在 actionPerformed 方法中访问。如果您想从其他方法访问它,请将其设为字段,或将其作为参数传递(例如,如果您正在处理摆动覆盖,则不可能)

标签: java colors click jbutton actionlistener


【解决方案1】:

这应该可以解决问题,如果您将局部变量 cBtn 变成一个字段,可以在您的班级中的任何地方访问:(我没有触及其余代码,因为它不是您当前问题的一部分)

 public class Main {
    private Color cBtn;
    public static void main(String[] args) {
        JFrame frame = new JFrame("Butt1");
        JButton btn = new JButton("Change color");
        button.addActionListener(new ActionListener() { 
            @Override 
            public void actionPerformed(ActionEvent e) { 
                cBtn = (colors[color++ % colors.length]); 
            }
        }
        frame.add(btn);
        btn.setBackground(cBtn);
        frame.setSize(250, 100);
        frame.setVisible(true);
    }
    Color[] colors = new Color[] { Color.red, Color.orange, Color.yellow,     Color.green, Color.blue,
            new Color(075, 000, 130), new Color(128, 000, 128)};
    int color;

}

【讨论】:

  • 我尝试了这个解决方案,但是仍然需要将字段设为静态,这使得更改颜色变得不可能。
  • 然后把它们都设为静态!似乎不会有麻烦,因为colors 被一劳永逸地实例化了。但是,如果您需要有关此代码的更多帮助,则必须提供更多上下文,或者创建一个新问题来解释您需要什么(例如,为什么需要static
  • 当我测试这个解决方案时,按下按钮并没有根据我的假设改变按钮的背景颜色。因此,据我了解,问题在于将该字段声明为静态。我看错了吗?
  • 好吧,正如我告诉你的,这完全是另一回事。鉴于actionPerformed 方法,我假设您使用的是Swing,如果是这种情况,则有问题:您不能只声明actionPerformed 方法,您需要为专用组件(侦听器?我不记得了^^),所以和原来的编译问题没有关系
  • 我把它复制到eclipse中,将按钮更改为btn等,遇到了更多的障碍。
【解决方案2】:

决定重做:

public class Main extends JFrame {
        private JButton btn;
        public Main() {
        super("Butt1");
        setLayout(new FlowLayout());

        btn = new JButton("ChangeColor");
        add(btn);
        ServClass serv = new ServClass();
        btn.addActionListener(serv);
    }

    Color[] colors = new Color[] { Color.red, Color.orange, Color.yellow, Color.green, Color.blue,
            new Color(075, 000, 130), new Color(128, 000, 128) };
    int color, click1 = 0;

    private class ServClass implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            btn.setBackground(colors[color++ % colors.length]);
        }
    }

    public static void main(String[] args) {
        Main run = new Main();
        run.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        run.setSize(250, 100);
        run.setVisible(true);
    }
}

它主要根据本教程: https://www.youtube.com/watch?v=3RQOikbGGUM

感谢 HBo 的支持!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2019-04-22
    相关资源
    最近更新 更多