是否可以使用十进制数字来定位JLabel,例如double?

时间:2017-05-30 21:51:50

标签: java swing jlabel

我正在使用Java制作平台游戏。我有一个带有图像图标的JLable形式的角色,可以使用箭头键移动它。我使用setBounds()方法来设置JLabel的位置,但是这个方法只将int值作为x和y参数,我想要更精确的控制。使用null布局,是否可以使用更精确的值(例如double)来定位JLabel?

感谢您的时间,祝您度过愉快的一天。

4 个答案:

答案 0 :(得分:4)

如果您正在使用JLabels,那么您正在使用Swing,而Swing具有非浮点坐标系统,所以不,你不能。

答案 1 :(得分:2)

Looking at the JavaDocs for JLabel ...

setLocationints作为参数。似乎没有办法使用小数点坐标。

答案 2 :(得分:1)

JavaFX可以做到。但是在Swing中,坐标是整数像素。

你可以在内存中绘制缩放的2x2(Image getGraphics),然后重新缩放以实现0.5的半整数步长;但这会模糊(内插像素)或闪烁(最近的匹配)。

对于缩放可缩放矢量图形,.vg,使用蜡染库是可行的。

对于文本子像素提示可以在某些LED屏幕上将黑色文本放在像素的三分之一上,具体取决于红色,绿色和蓝色子像素的布局。

  

一般来说,尝试以上操作是不值得的。除了 JavaFX 具有很好的动画支持,CSS样式和动画效果。

答案 3 :(得分:1)

正如其他人所说,UI组件的设计只能使用精确的像素坐标。

您可以在double中存储位置,然后在实际设置位置时将其四舍五入为int。像这样:

double velX = ..., velY = ...;
double x    = ..., y    = ...;

void example() {
    int t = 1000 / 30;
    new Timer(t, (ActionEvent e) -> {
        x += t * velX;
        y += t * velY;
        label.setLocation((int) Math.round(x),
                          (int) Math.round(y));
    }).start();
}

这样你可以以较小的增量移动。它只是不可见。

There is a really great example of animating an image here的方式非常类似于您要描述的内容。在我看来,尝试定位组件确实比它的价值更麻烦,特别是如果你想尝试做类似游戏的东西。执行自定义绘画更灵活。 (教程为here。)