在GUI中移动球

时间:2018-03-09 14:42:49

标签: java swing jframe applet

如何通过按左右按钮移动球来制作? 这是代码:

    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.
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用KeyListener类。

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

例如,当按下左箭头键但尚未释放时,继续逐帧左移球。当钥匙被释放后,停止移动球。

通过这种方式获得的好处是,您可以同时处理多个按键,同时避免键盘重复率因用户而异。

编辑:我的错误,我想通过按钮你指的是键盘上的一把钥匙......

您可以使用MouseListener类。

,而不是使用KeyListener

如果您想使用JButton实现相同的功能,可以使用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.
        }
    });
}