我想让JLabel
(点)移动位置。它不起作用,当我添加frame.setLayout(null)
时,我只是得到一个空白的黑屏。
JFrame frame = new JFrame( "That snake game");
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel point = new JLabel("|eat this|");
point.setForeground(Color.blue);
frame.getContentPane().add(point);
frame.getContentPane().setBackground(new Color(0,3,0));
frame.setSize(400, 400);
point.setLocation(340, 34);
frame.setVisible(true);
如何让JLabel(点)移动位置?
答案 0 :(得分:0)
我看到你想创建一个Snake游戏。您使用的是错误的API。为此,您应该使用Swing的绘画API。这是我创建的Snake游戏:Snake game tutorial。
JLabel
和其他组件用于创建典型桌面应用程序的用户界面;他们不习惯创造游戏。
现在为什么你的例子不起作用:你还需要设置JLabel
的大小。因此,如果您使用的是setLocation()
,那么您应该这样做
也可以使用setSize()
,或使用一次setBounds()
来电。
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
/**
* Demonstrating setLocation method
* @Author Jan Bodnar
* Website zetcode.com
*/
public class SetLocationEx extends JFrame {
public SetLocationEx() {
initUI();
}
private void initUI() {
setLayout(null);
JLabel lbl1 = new JLabel("JLabel");
lbl1.setBorder(BorderFactory.createEtchedBorder());
lbl1.setSize(80, 30);
lbl1.setLocation(50, 100);
add(lbl1);
setSize(350, 300);
setTitle("SetLocation example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
SetLocationEx ex = new SetLocationEx();
ex.setVisible(true);
});
}
}
截图:
答案 1 :(得分:-1)
有一个非常基本的教程here可以给你提示。
至少你需要
你的问题可能是你错过了重绘,而setBounds是标签吗?
然而,正如安德鲁所说,摆动是棘手的,这个摆动布局主题很复杂,所以这可能不是最好的方法。
可能你应该重新设计游戏的某些部分,使得图形部分不会过多地干扰gui元素 例如 - 一个想法 - 在自定义绘制和完全托管组件中限制所有图形交互? 如果这是游戏的一部分,包括绘制移动文本 所以你不会移动JLabel并扰乱布局部分。 (只是一个想法)
答案 2 :(得分:-2)
使用setBounds(int x,int y,int width,int height)。我希望这有帮助!此外,如果您不想要布局,请不要使用setLayout函数。 setLayout(null)有问题