Swing/ProgressStringAlignment のバックアップの現在との差分(No.9)
- 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:
概要
JProgressBar
の進捗文字列をJLabel
にして、字揃えなどを変更します。
Screenshot
Advertisement
サンプルコード
#spandel
JProgressBar bar = new JProgressBar(model) {
#spanend
private final JLabel label = new JLabel(getString(), halign);
private final ChangeListener changeListener = new ChangeListener() {
@Override public void stateChanged(ChangeEvent e) {
label.setText(getString());
}
};
#spanadd
class StringAlignmentProgressBar extends JProgressBar {
#spanend
private final JLabel label;
// private transient ChangeListener changeListener;
#spanadd
#spanend
protected StringAlignmentProgressBar(BoundedRangeModel model, int horizAlignment) {
super(model);
label = new JLabel(" ", horizAlignment);
}
#spanadd
#spanend
@Override public void updateUI() {
removeChangeListener(changeListener);
removeAll();
// removeChangeListener(changeListener);
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));
}
setLayout(new BorderLayout());
// changeListener = e -> label.setText(getString());
// addChangeListener(changeListener);
EventQueue.invokeLater(() -> {
add(label);
label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
});
}
#spandel
};
#spanend
#spanadd
#spanend
@Override protected ChangeListener createChangeListener() {
return e -> label.setText(getString());
}
#spanadd
}
#spanend
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JProgressBar
のレイアウトをBorderLayout
に変更し、水平方向の配置方法を設定したJLabel
を追加して字揃えを変更しています。
-
JProgressBar#setStringPainted(true)
を同時に使用すると、2
重に表示される -
JProgressBar#setStringPainted(true)
を同時に使用すると2
重に表示される - 進捗状況に応じた文字色の変化には対応していない
-
NimbusLookAndFeel
の場合で、TitledBorder
などを直接JProgressBar
に設定しても、進捗文字列の垂直位置がずれない -
NimbusLookAndFeel
を適用したJProgressBar
にTitledBorder
を設定するとデフォルトのJProgressBar#setStringPainted(true)
で表示される進捗文字列の垂直位置がずれる場合がある