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); } }
有没有不用Rectangle 就能解决的办法?
可以写个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; }... 仅供参考
java下面的布局控制不太容易实现这些
不如其他语言来的方便
帮你顶!
glorywine(已非當年)我只要求能在一个JPanel中实现就可
将布局设为NULL //setLayout(null);我自己用的getX()和getY()可以实现,但是太死板了!比如如果A的左上角碰到B的右下角等等
难道都要用getX()和getY()用if()来比较吗? 我是想大家谁有更好的方法
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);
}
}
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());
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);
}
}
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;
}...
仅供参考
强啊!
学习!