JLabel根据内部的值继续移动

时间:2012-11-07 17:40:06

标签: java swing applet jlabel

所以我正在为游戏创建一个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);

提前致谢。

3 个答案:

答案 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);
    }
}