• category: swing folder: ProgressStringAlignment title: JProgressBarの進捗文字列の字揃えを変更する tags: [JProgressBar, JLabel, BorderLayout, Alignment] author: aterai pubdate: 2012-04-02T16:48:11+09:00 description: JProgressBarの進捗文字列をJLabelにして、字揃えなどを変更します。 image: https://lh5.googleusercontent.com/-zRMPjXT7do4/T3lYdJUnilI/AAAAAAAABLA/kcpMYSYoklM/s800/ProgressStringAlignment.png

概要

JProgressBarの進捗文字列をJLabelにして、字揃えなどを変更します。

サンプルコード

JProgressBar bar = new JProgressBar(model) {
  private final JLabel label = new JLabel(getString(), halign);
  private final ChangeListener changeListener = new ChangeListener() {
    @Override public void stateChanged(ChangeEvent e) {
      label.setText(getString());
    }
  };

  @Override public void updateUI() {
    removeChangeListener(changeListener);
    removeAll();
    super.updateUI();
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        setLayout(new BorderLayout());
        addChangeListener(changeListener);
        add(label);
        label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
      }
    });
  }
};
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JProgressBarのレイアウトをBorderLayoutに変更し、水平方向の配置方法を設定したJLabelを追加して字揃えを変更しています。

  • JProgressBar#setStringPainted(true)を同時に使用すると2重に表示される
  • 進捗状況に応じた文字色の変化には対応していない
  • NimbusLookAndFeelの場合、TitledBorderなどを直接JProgressBarに設定しても進捗文字列の垂直位置がずれない

参考リンク

コメント