0

そこで、ゲーム用の Java アプレットを作成し、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 に答える