0

所以我正在为游戏创建一个 Java Applet,并且我正在使用 JLabel 来显示玩家的当前分数。JLabel 中的分数不断更新,但是当分数从 9 到 10 或从 99 到 100 时,由于添加了整数,JLabel 的位置(?或者可能只是 JLabel 的文本)移动了。

例如,

    分数:9 变成
   分数:10

如您所见,“Score”一词的位置向左移动。我想防止这种情况发生。我认为左对齐文本可以解决问题,但绝对没有。:/

这是一些相关的代码:

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);

提前致谢。

4

3 回答 3

1

代替:

label.setText("Score: " + getScore());

经过:

label.setText(String.format("Score: %-5s", getScore()));

其中5表示分数的最大位数。负数左对齐,否则右对齐。

于 2012-11-07T19:03:18.580 回答
0

尝试使用

label.setMinimumSize(新维度(100,100));

label.setPreferredSize(新维度(100,100));

有一个非常相似的问题,当我把它们一起写成这个组件的属性时,它们工作得很好。

于 2012-11-07T17:48:37.900 回答
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);
    }
}
于 2012-11-07T18:48:45.163 回答