使用swing Component随机移动对象

时间:2015-02-10 23:26:40

标签: java

我创建了一个使用摆动组件的方块,当分配给它们的按钮单击时,它们会向右,向左,向上和向下移动。现在我尝试在单击时以随机方式移动此对象。这是我的代码。

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

@SuppressWarnings("serial")
public class MovingObjects extends JFrame 
    implements ActionListener {

//    GUI code omitted here...

    @SuppressWarnings("unused")
    private JButton button, leftButton,rightButton,upButton,downButton;
    private JPanel panel,redPanel;
    int x =10;
    int y=10;       

    public static void main (String[] args) {
        MovingObjects frame = new MovingObjects();
        frame.setSize(400, 300);
        frame.createGUI();
        frame.show();
        frame.getContentPane().setBackground(Color.blue);

    }

    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout() );

        panel = new JPanel();
        panel.setPreferredSize(new Dimension(300, 200));
        panel.setBackground(Color.black);
        window.add(panel);

        redPanel = new JPanel();
        redPanel.setBackground(Color.red);
        redPanel.setLocation(x, y);
        redPanel.setSize(50, 50);
        panel.add(redPanel);


        leftButton = new JButton("Move Left");
        leftButton.addActionListener(this);
        window.add(leftButton);

        rightButton = new JButton("Move Right");
        rightButton.addActionListener(this);
        window.add(rightButton);

        upButton = new JButton("Move Up");
        upButton.setLocation(260, 60);
        upButton.setSize(100, 30);
        upButton.addActionListener(this);
        window.add(upButton);


        downButton = new JButton("Move Down");
        downButton.addActionListener(this);
        window.add(downButton);

    }


    public void actionPerformed(ActionEvent event) {

        //Move down
         if (event.getSource() == downButton)
            {
             if (y < 180){
             y=y+20;     
             redPanel.setLocation(x, y);

             }
            }
         //Move Up
             if (event.getSource() == upButton)  
             {
            if (y > 10){
             y=y-20;     
             redPanel.setLocation(x, y);
            }
             }
         //Move Left
             if (event.getSource() == leftButton)
             {
             if (x > 10){
             x=x-20;     
             redPanel.setLocation(x, y);
              }
             }
         //Move Right
             if (event.getSource() == rightButton)
             {
             if (x < 280){
             x=x+20;
             redPanel.setLocation(x, y);
                }
             }

    }


    }

2 个答案:

答案 0 :(得分:0)

你可以让java.util.Random生成一个整数。如果有四个可能的方向,则可以考虑生成1到4之间的随机数(包括1和4),然后根据该方向触发代码在四个方向中的一个方向上移动,例如,如果生成1,则可以触发代码向上移动,如果生成2然后代码向下移动等等

答案 1 :(得分:0)

我认为这应该符合您的期望。

  1. 我添加了一个名为JButton
  2. 的新randomButton
  3. 您创建了一个类Random()的实例 - rnd 不要忘记导入 java.util.Random
  4. 您可以使用最大x和x定义两个变量(xMaxyMax)。 y位置限制。在您的情况下,panel的宽度减去redPanel的{​​{1}}宽度和xMax的高度相同的东西。
  5. 通过调用方法yMax生成随机整数 ,但是 nextInt(int n)方法返回以下 - 值 在0(含)和n(不包括)之间,因此我们需要添加 nextInt(int n)
  6. 我们设置了+1

    的位置
    redPanel