【问题标题】:Moving Ball in GUI在 GUI 中移动球
【发布时间】:2018-03-09 14:42:49
【问题描述】:

我怎样才能通过按左右键移动球? 代码如下:

    private JPanel panel;
    private JButton left;
    private JButton right;
    private Container c = getContentPane();

    cycle() {
        panel = new JPanel();
        right = new JButton("RIGHT");
        right.addActionListener(this);

        left = new JButton("LEFT");
        left.addActionListener(this);
        c.add(panel);
        panel.add(right);
        panel.add(left);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        cycle ball = new cycle();
        f.add(ball);
        f.setTitle("Move the ball");
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        g.drawOval(150, 50, 150, 150);
        g.setColor(Color.yellow);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

【问题讨论】:

    标签: java swing jframe applet


    【解决方案1】:

    您可以使用KeyListener 类。

    特别是: KeyListener#keyPressed(KeyEvent e);KeyListener#keyReleased(KeyEvent e);

    例如,当按下左箭头键但尚未释放时,继续逐帧将球向左移动。松开按键后,停止移动球。

    这样做的好处是您可以一次处理多个按住的键,同时避免因用户而异的键盘重复率。

    编辑:我的错误,我以为按钮指的是键盘上的键...

    您可以使用MouseListener 类,而不是使用KeyListener

    如果您想使用 JButtons 实现相同的功能,您可以使用 JButton#addMouseListener 并向其添加 new MouseAdapter()。您必须指定mousePressed()mouseReleased(),就像我关于KeyListeners 的答案的上一部分一样。

    这是一个例子:

    public JButton aButton;
    
    ...
    ...
    
    public void static main (String... args) {
    
        ...
        ...
    
        aButton.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent me) {
                // Start doing stuff.  In your case, going left or right.
                // In this situation, it may be best to use a state variable like in the KeyListener example.
            }
            public void mouseReleased(MouseEvent me) {
                // Stop doing stuff.
            }
        });
    }
    

    【讨论】:

    • 我想到了这一点,我在另一篇文章中看到了它,但我正在尝试通过按钮学习。
    • 我误解了你的问题,由于某种原因,我以为你指的是按键。我已经修正了原来的答案,现在应该更准确了。
    • 这是我想听到的,由 aButton.addMouseListener 提供。但问题是如何向左或向右移动。我认为是:如果左则 x+1 和右 x-1
    • 你有一个帧率系统已经工作了吗?我假设你正在制作某种游戏。如果您无法控制何时重新绘制视图,我们将不得不先处理这个问题,然后才能移动球。
    • “我正在尝试通过按钮学习” 这个问题非常令人困惑。 1)通过'按钮'DYM a JButton 或鼠标按钮? 2) 代码使用JFrame时,为什么标题会显示“applet”?
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2013-07-18
    • 2011-12-11
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多