在JPanels限制内移动JLabel(认为这是一个数学问题)JAVA
此外,这也可能有助于其他想要移动jlabel的人 因此,情况如下:在JPanels限制内移动JLabel(认为这是一个数学问题)JAVA,java,swing,user-interface,jpanel,jlabel,Java,Swing,User Interface,Jpanel,Jlabel,此外,这也可能有助于其他想要移动jlabel的人 因此,情况如下: 1个JPanel,其中包含一个项目 1 JLabel,其中有一个Img作为图标 我想在面板周围移动JLabel,但不要超出面板的边界(这样用户可以看到屏幕上的所有图像) 代码如下: 我在那里: int randH = 0; int randW = 0; int targetHeight = 0; int targetWidth = 0; 然后,当面板根据加载的(目标/IMG)打开时: targetHeight = jL
int randH = 0;
int randW = 0;
int targetHeight = 0;
int targetWidth = 0;
然后,当面板根据加载的(目标/IMG)打开时:
targetHeight = jLabel1.getHeight();
targetWidth = jLabel1.getWidth();
然后,单击标签时,我调用此代码来移动标签:
int posH = jPanel1.getHeight() - targetHeight;
int posW = jPanel1.getWidth() - targetWidth;
randH = new Random().nextInt(posH) - jLabel1.getHeight();
randW = new Random().nextInt(posW) - jLabel1.getWidth();
if (randH <= 0) {
int num = (int) (Math.random() * 5);;
randH = num;
}
if (randW <= 0) {
int num = (int) (Math.random() * 5);;
randW = num;
}
if (randH >= posH) {
int num = (int) (Math.random() * 5);;
randH = posH - num;
}
if (randW >= posW) {
int num = (int) (Math.random() * 5);;
randW = posW - num;
}
jPanel1.setLayout(null);
jLabel1.setBounds(new Rectangle(new Point(200, 300), jLabel1.getPreferredSize()));
jLabel1.setLocation(randW, randH);
jLabel1.setVisible(true);
intposh=jPanel1.getHeight()-targetHeight;
int posW=jPanel1.getWidth()-targetWidth;
randH=newrandom().nextInt(posH)-jLabel1.getHeight();
randW=newrandom().nextInt(posW)-jLabel1.getWidth();
if(randH=posW){
int num=(int)(Math.random()*5);;
randW=posW-num;
}
jPanel1.setLayout(空);
jLabel1.setBounds(新矩形(新点(200300),jLabel1.getPreferredSize());
jLabel1.设置位置(随机、随机);
jLabel1.setVisible(true);
因此,有时当IMG的值大于JPanel的维度时,IMG部分不在面板中
有什么原因吗?所以在检查完所有内容并感谢所有人的帮助之后
randH = new Random().nextInt((posH - 0) + 1) + 0;
似乎已经把我带到了我需要的地方
posH = is the max value
0 = is the min value
+1 = include max
+0 = include min
为了进一步解释,下面的代码是为了确保IMG没有紧靠面板边框,因此图像和边框之间至少有5个像素
if (randH <= 0) {
int num = (int) (Math.random() * 5);;
randH = num;
}
if (randW <= 0) {
int num = (int) (Math.random() * 5);;
randW = num;
}
if (randH >= posH) {
int num = (int) (Math.random() * 5);;
randH = posH - num;
}
if (randW >= posW) {
int num = (int) (Math.random() * 5);;
randW = posW - num;
}
if(randH=posW){
int num=(int)(Math.random()*5);;
randW=posW-num;
}
就我所知,这可能做得不好:D认为这是一个数学问题-进行一些调试并显示计算的中间值。然后当你得到一个不期望的值时,你就解决了这个问题。我试过了,99.9%的时间都很好。当我发现不是时,我没有检查值:die,我检查似乎很好,然后我停止检查,结果你的代码中有“随机”逻辑。因此,您需要确定为什么随机逻辑生成的值太大。我不明白你为什么有两套随机逻辑。如果有宽度为100的面板和宽度为20的图像,则标签的位置可以是0-80。所以你在这个范围内生成一个数字。所以它绘制JLabel的方式基本上是从左上角开始的,所以我得到高度和宽度,然后需要去掉IMG的大小,这样整个图像都在panels视图中。如果我不这样做,通常会将IMG置于视图之外,解决此JLabel移动“问题”的方法是直接在绘图JPanel上绘制图像。Oracle教程将向您展示如何使用Oracle。