如何确保我的图像不会在JFrame之外绘制?

时间:2014-02-15 17:31:38

标签: java swing graphics

我正在开发一个项目,在600x600窗口中随机绘制一个64x64红球,它将从“墙壁”移动并反弹。 (窗口的边框)我的红色球是在JPanel上绘制的JLabel。我正在使用setBounds。我相信你在setBounds中输入的数字将是你正在绘制的图像的左上角。所以我认为图像的随机坐标应该是0到536(即600 - 64)。但是,当我这样做时,只显示图像的一半。另一半无法看到,因为它在JFrame之外。如何在运行时始终保持100%可见的位置?

import java.awt.*;

import javax.swing.*;

public class BallBounce {

public JFrame frame;
public JPanel panel;
public JLabel ball;
public ImageIcon ballIcon = new ImageIcon("images/ball.png");
public int bpx; //ballpositionx
public int bpy;
public int bsx = 1; //ballspeedx
public int bsy = 1;

public BallBounce() {
    frame = new JFrame();
    frame.setTitle("Ball Bounce");
    frame.setSize(600, 600);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setVisible(true);

    panel = new JPanel();
    panel.setLayout(null);
    panel.setSize(600,600);

    ball = new JLabel();
    ball.setIcon(ballIcon);
    bpx = (int)(Math.random()*536)+0;
    bpy = (int)(Math.random()*536)+0;
    ball.setBounds(bpx, bpy, 64, 64);
    panel.add(ball);

    frame.add(panel);
    frame.revalidate();
}

public static void main(String args[]) {
    BallBounce bb = new BallBounce();
}

}

1 个答案:

答案 0 :(得分:1)

由于球的中心线实际上位于其中间 - 通过将半径添加到设定区来补偿差异 - 只需快速回答