java - 代码非常相似的按钮不能同时工作。为什么?

标签 java swing actionlistener

<分区>

我正在编写一个非常基本的代码来让一个点在屏幕上四处移动。我的目标是最终制作一款冒险游戏。它主要是 GUI,但我的按钮有一些问题。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class gui {
    int x = 240;
    int y = 240;
    JPanel panel1 = new JPanel();
    MyDrawPanel drawpanel = new MyDrawPanel();
    public void go() {
        JFrame frame = new JFrame("DotMover");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(BorderLayout.CENTER, drawpanel);
        frame.getContentPane().add(BorderLayout.SOUTH, panel1);
        frame.setSize(500, 500);
        drawpanel.repaint();

        JButton leftbutton = new JButton("<----");
        leftbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                x = x - 1;
                drawpanel.repaint();
            }
        });
        panel1.add(leftbutton);

        JButton rightbutton = new JButton("---->");
        rightbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                x++;
                drawpanel.repaint();
            }
        });
        panel1.add(rightbutton);

        JButton upbutton = new JButton("Up");
        upbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                y++;
                drawpanel.repaint();
            }
        });
        panel1.add(upbutton);

        JButton downbutton = new JButton("Down");
        upbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                y = y - 1;
                drawpanel.repaint();
            }
        });
        panel1.add(downbutton);
        frame.setVisible(true);
    }

    class MyDrawPanel extends JPanel {
        public void paintComponent(Graphics g) {
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.GREEN);
            g.fillOval(x, y, 20, 20);
        }
    }
}

public class dotmoveriii {
    public static void main(String[] args) {
        gui a = new gui();
        a.go();
    }
}

当我在我的计算机上运行它时,左右按钮可以工作,但向上和向下按钮不起作用。这是怎么回事?

最佳答案

您添加了两个相互撤消向上按钮效果的 Action 监听器,并且没有在向下按钮上添加 Action 监听器。这就是为什么两个按钮都不会产生任何可见效果的原因。

一个按钮可以有多个 Action 监听器。实际上,您的向上按钮将椭圆向上移动,然后立即向下移动。整体效果是椭圆形保持原位。

显然,您需要做的就是修复复制粘贴错误:

downbutton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        y++; // The "up" button should be y--, because the y axis points down
        drawpanel.repaint();
    }
});

(注意使用 y-- 而不是 y = y - 1。因为你已经有一个 ++,所以没有理由不使用 --)。

关于java - 代码非常相似的按钮不能同时工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305161/

相关文章:

Java GUI JButton 到 Action 监听器

java - if 语句中线程 "main"java.util.NoSuchElementException 中出现异常

java - 使用 Spring 社交无法通过 facebook 获取超过 100 个 friend 的个人资料

Java:如何设计 Swing 组件的样式?

java - 使用包含可编辑 JTextArea 的 JPanel 呈现 JTree 叶

java - 如何在 DefaultListModel 中而不是在 JList 中添加操作监听器

java - Hibernate:运行查询以获取日期范围内的结果时没有结果

java - YUI compressor 2.4.7 无法压缩js文件

java - 程序运行时使用 System.out 更新 jTextArea

Java ActionListener 未按预期工作