【发布时间】:2022-01-15 05:25:04
【问题描述】:
我想制作一个标签并在屏幕上移动它。我试图找到一些视频和其他资源以找到如何做到这一点,但无法很好地理解它们,或者他们使用了我从未听说过的东西。 所以我做了这段代码(框架扩展了JFrame并实现了MouseListener):
这是主类:
public class Main {
public static void main(String[] args) {
new Frame();
}
}
这是带有代码的类:
public class Frame extends JFrame implements MouseListener{
JLabel label;
Frame() {
label = new JLabel();
label.setBounds(800, 200, 200, 200);
label.setBackground(Color.RED);
label.setOpaque(true);
label.addMouseListener(this);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(1200, 700);
this.setLayout(null);
this.add(label);
this.setVisible(true);
this.setLocationRelativeTo(null);
}
@Override
public void mouseReleased(MouseEvent e) {
Point x = e.getPoint();
label.setLocation(x);
System.out.println(x);
}
当我尝试移动标签时,标签会移动,但不是在我想要的位置。 只有有时,标签会朝我想要的方向移动,但大多数时候,它会朝任意随机方向移动。即使我只是点击,它也会移动。 但是,即使标签向我想要的方向移动,它也会在该方向上随机长度。
【问题讨论】:
-
1) 同意 MRE 上的@c0der。 2)但我觉得整个方法都不是最优的。我不会使用
null布局和移动组件,而是自定义绘制面板并使用基本字符串来替换标签。使用getLocationOnScreen似乎也容易出错。我总是使用感兴趣的组件中的位置。 3)“我试图找到一些视频和其他来源”忘记视频,至于“其他来源”,我强烈推荐Java Docs和Java Tutorial。 -
您需要使用
getPoint。它不会是随机的,如果你打印坐标,你就会知道它是对的。您还将知道您希望它移动到的位置,并基于此更改您的逻辑。 -
我刚刚做了一个名为 Frame 的类,扩展了 JFrame 并实现了 MouseListener 请提供 mre
-
“我刚开了一个课..” 所以把这个简短的(完整的)代码发布为minimal reproducible example。你的陈述在这里读起来像 “帮助我,你只需要..” 这是我停止阅读的地方,因为我们不需要做任何事情。我们的兴趣纯粹是学术性的,周围还有很多其他人确实听从我们的建议并让我们轻松提供帮助。
标签: java swing user-interface label mouselistener