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

标签 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();
}

}

最佳答案

由于球的中心线实际上位于球的中间 - 通过将半径添加到设定边界来补偿差异 - 只是一个快速答案

关于java - 如何确保我的图像不会在 JFrame 之外绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801074/

相关文章:

java - 获取空查询结果后的列名称

java - 如何创建全屏宽度 jtoolbar

java - Swing 中的计时器阻塞线程

java - Swing 步进式光标移动

java - 通过图像透明查看JButton Java

java - 是否可能/需要在同一条目上加速 HashMap 操作?

java - JAX-B 将字符串映射到 JAXBElement<String>

java - JFrame JTable 列名称不显示并且滚动条不显示

java - 创建大量实例是我的程序变慢的原因吗? (Java 图形)

java - 我正在寻找 Java 图形库