我知道我是个白痴,这就是为什么我无法解决这个问题但是我想用paintComponent绘制一堆带有random大小和位置的矩形。我试图确保所有这些都被画在框架内。我能够使用以下代码(片段)来完成它,但我想知道是否有更好的方法来做到这一点,而不是硬编码数字到程序中。有没有一种方法我应该看一下,这可能是我正在寻找的东西?
这是覆盖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);
}
}
答案 0 :(得分:4)
我想知道是否有更好的方法来比我将数字编码到程序中更好。
是的,有
getSize()
,以便您可以看到正在绘制的组件的实际边界。 (编辑:或getWidth()
和getHeight()
按照卢卡斯的建议 - 1+给他答案!)。paintComponent(...)
方法。答案 1 :(得分:4)
你应该以你的坐标为基础。 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);
答案 2 :(得分:2)
有一种方法可以获得您正在使用的面板的长度和宽度。
getHeight();
getWidth();
这些将返回您正在使用的JPanel的当前大小,这意味着如果您调整窗口大小,它实际上仍会将其绘制在内部。
http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#getWidth()