有两个按钮A和B通过键盘移动A当A移动时如果接触到B!让B消失!这要怎样实现啊?

解决方案 »

  1.   

    这个实现起来不容易啊
    java下面的布局控制不太容易实现这些
    不如其他语言来的方便
    帮你顶!
      

  2.   

    3Q 
    glorywine(已非當年)我只要求能在一个JPanel中实现就可
    将布局设为NULL //setLayout(null);我自己用的getX()和getY()可以实现,但是太死板了!比如如果A的左上角碰到B的右下角等等
    难道都要用getX()和getY()用if()来比较吗? 我是想大家谁有更好的方法
      

  3.   

    import java.awt.BorderLayout;
    import java.awt.Rectangle;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class MoveButton
    {
    public static void main(String[] args)
    {
    JPanel p = new JPanel(null);
    final JButton btn1 = new JButton("Button 1");
    final JButton btn2 = new JButton("Button 2");

    p.add(btn1);
    p.add(btn2);

    btn1.setSize(btn1.getPreferredSize());
    btn2.setSize(btn2.getPreferredSize());
    btn1.setLocation(100, 100);
    btn2.setLocation(200, 100); btn1.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e)
    {
    int dx, dy;
    if (e.getKeyCode() == KeyEvent.VK_UP) {
    dx = 0;  dy = -1;
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
    dx = 0;  dy = 1;
    }
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
    dx = -1;  dy = 0;
    }
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
    dx = 1;  dy = 0;
    }
    else {
    return;
    }
    btn1.setLocation(btn1.getX() + dx, btn1.getY() + dy);

    if (btn2.isVisible()) {
    Rectangle rect1 = btn1.getBounds();
    Rectangle rect2 = btn2.getBounds();
    if (rect1.intersects(rect2)) {
    btn2.setVisible(false);
    }
    }
    }
    });

    JFrame f = new JFrame("MoveButton");
    f.getContentPane().add(p, BorderLayout.CENTER);
    f.setSize(400, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);

    }
    }
      

  4.   

    谢谢 gtlang78()
    if (btn2.isVisible()) {
    Rectangle rect1 = btn1.getBounds();
    Rectangle rect2 = btn2.getBounds();
    if (rect1.intersects(rect2)) {
    btn2.setVisible(false);
    }
    }
    ========================
    妙啊~
    不过如果我有几十个按钮
    是不是就要生成几十个Rectangle 啊?有没有直接通过按钮本身的方法就可以实现的?
    比如通过A.contains(B.getX(),B.getY());
      

  5.   

    Rectangle rect1 = btn1.getBounds();
    int n = p.getComponentCount();
    for (int i = 0; i < n; i++) {
    Component c = p.getComponent(n);
    if (c == btn1 || !c.isVisible()) {
    continue;
    }
    Rectangle rect2 = c.getBounds();
    if (rect1.intersects(rect2)) {
    c.setVisible(false);
    }
    }
      

  6.   

    有没有不用Rectangle 就能解决的办法?
      

  7.   

    可以写个find方法ArrayList squares = new ArrayList();...
        public Rectangle2D find(Point2D p) {
            for (int i = 0; i < squares.size(); i++) {
                Rectangle2D r = (Rectangle2D) squares.get(i);
                if (r.contains(p))
                    return r;
            }
            return null;
        }...
    仅供参考
      

  8.   

    gtlang78()
    强啊!
    学习!