java - 将矩形保留在 JFrame 中

标签 java swing user-interface jframe paintcomponent

我知道我是个白痴,这就是为什么我无法弄清楚,但我正在尝试使用 paintComponent 绘制一堆具有随机大小和位置的矩形。我试图确保所有这些都画在框架内。我可以用下面的代码(片段)来完成,但我想知道是否有比我将数字硬编码到程序中更好的方法。有没有我应该看看的方法,这可能是我正在寻找的方法?

这是覆盖 paintComponent() 方法的内部类:

class DrawPanel extends JPanel {
    public void paintComponent(Graphics g) {
        int red = (int)(Math.random()*256);
        int blue = (int)(Math.random()*256);
        int green = (int)(Math.random()*256);

        g.setColor(new Color(red, blue, green));
        //The following 4 lines keep the rects within the frame
        //The frame is 500,500
        int ht = (int)(Math.random()*400);
        int wd = (int)(Math.random()*400);

        int x = (int)(Math.random()*100);
        int y = (int)(Math.random()*100);

        g.fillRect(x,y,ht,wd);
    }
}

最佳答案

您应该根据 DrawPanel 组件大小来确定您的坐标和大小。同时使用 Random.nextInt而不是 Math.random() 将使它更容易保持在基于面板当前大小的范围内:

Random random = new Random();
int ht = random.nextInt(getHeight());
int wd = random.nextInt(getWidth());

int x = random.nextInt(getWidth() - wd);
int y = random.nextInt(getHeight() - ht);

关于java - 将矩形保留在 JFrame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13779500/

相关文章:

java - 如何自动提交jpa事务

java - 时间戳字段的自定义打印

java - 在Android Studio上通过Intent将变量 "date"传递给另一个类,NULL OBJECT REFERENCE

java - JLabel 的高度随行数增长

java - JFileChooser 未打开默认的 Win 7 文件资源管理器

java - MVC中类间消息传递的正确方法是什么?

c++ - 我应该学习 GTK+ 还是 GTKMM?

Windows 布局外观

java - 如何处理客户端/服务器应用程序以发送消息和/或文件

qt - Delphi XE - 使用 Qt GUI 库的 Delphi 项目