gpt4 book ai didi

java - 计时器类通过 JFrame 移动 JLabel!为什么 JLabel 文本不能可变?

转载 作者:行者123 更新时间:2023-11-30 05:51:32 25 4
gpt4 key购买 nike

如果我说在最后第二行和第三行

label.setText("x = ");

标签移动得很完美,但是当我把它改成

label.setText("x = "+ x);

它不动。具体来说,我想查看 JLabel 按变量 x 移动时的宽度位置!除此之外,我说 label.setBounds(x,(getHeight()/2),300,300); 将标签的 Y 边界设置为帧大小的一半,但它不在帧的中间?有什么想法吗?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.Timer;

import javax.swing.JFrame;

public class myTiemr {

public static void main(String args[])
{
TimeFrame frame = new TimeFrame();
}
}

class TimeFrame extends JFrame
{
private static final long serialVersionUID = 1L;
private int x = 0;
JLabel label = new JLabel("Here is my label");
public TimeFrame()
{
int d = 10;
setTitle("My Frame");
setSize(500,500);
this.setLocationRelativeTo(null);
add(label);
Timer time = new Timer(d,new TimerListener());
time.start();
setVisible(true);
}
class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(x>getWidth()){
x=-100;
}
x+=1;
label.setText("x = "+ x);
//label.setText("x = ");
label.setBounds(x,(getHeight()/2),300,300);
}
}

}

最佳答案

label.setText("x = "+ x) 导致文本保持静止但行 label.setText("x = ") 的原因导致标签跨帧移动的原因是在 JLabel 上调用了 revalidate()。这将导致应用当前布局管理器规则的正确行为(在本例中为 BorderLayout)。

当文本没有改变时,永远不会调用revalidate()

正如@Sébastien Le Callonnec 建议的那样,在框架上设置无布局会导致

label.setText("x = "+ x)

根据需要移动。

关于java - 计时器类通过 JFrame 移动 JLabel!为什么 JLabel 文本不能可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com