所以我正在为游戏创建一个Java Applet,我正在使用JLabel来显示玩家的当前分数。 JLabel内部的分数不断更新,但是当分数从9到10或99到100时,由于添加了整数,JLabel的位置(或者可能只是JLabel的文本)会被移动。
例如,
得分:9成为
得分:10
正如您所看到的,“得分”一词的位置向左移动。我想防止这种情况发生。我认为左对齐文本可以解决问题,但绝对没有。 :/
以下是一些相关代码:
label = new JLabel("Score", SwingConstants.LEFT);
label.setFont(new Font("Lucida Grande", Font.PLAIN, 27));
label.setText("Score: " + getScore());
label.setBounds(0, 152, 213, 42);
提前致谢。
答案 0 :(得分:1)
替换:
label.setText("Score: " + getScore());
由:
label.setText(String.format("Score: %-5s", getScore()));
其中5
表示分数的最大位数。负数对齐左侧,否则右对齐。
答案 1 :(得分:0)
尝试使用
label.setMinimumSize(new Dimension(100,100));
label.setPreferredSize(new Dimmension(100,100));
有一个非常相似的问题,当我把它们作为这个组件的属性一起编写时,它们工作得很好。
答案 2 :(得分:0)
这就是您的布局管理器。看这个例子。阅读布局管理人员,了解其他方法。取消注释以防止标签移动。
public class Test
{
private static int score = 0;
public static void main(String[] args)
{
JFrame frame = new JFrame();
JPanel panel = new JPanel();
//panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
final JLabel label = new JLabel("Score: " + score);
//panel.add(Box.createHorizontalStrut(8));
panel.add(label);
//panel.add(Box.createHorizontalGlue());
frame.add(panel);
frame.pack();
frame.setVisible(true);
TimerTask task = new TimerTask() {
public void run() {
score++;
label.setText("Score: " + score);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 100);
}
}