JSpinnerのエディタの字揃えを変更する
Total: 1393
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JSpinner
のJSpinner.DefaultEditor
に適用する字揃えを変更します。
Screenshot
Advertisement
サンプルコード
// UIManager.put("Spinner.editorAlignment", SwingConstants.CENTER);
// System.out.println(UIManager.get("Spinner.editorAlignment"));
JRadioButton r1 = new JRadioButton("LEADING");
JRadioButton r2 = new JRadioButton("CENTER");
JRadioButton r3 = new JRadioButton("TRAILING");
ItemListener il = e -> {
int alignment;
if (e.getItemSelectable() == r1) {
alignment = SwingConstants.LEADING;
} else if (e.getItemSelectable() == r2) {
alignment = SwingConstants.CENTER;
} else {
alignment = SwingConstants.TRAILING;
}
UIManager.put("Spinner.editorAlignment", alignment);
SwingUtilities.updateComponentTreeUI(this);
};
ButtonGroup bg = new ButtonGroup();
Box box = Box.createHorizontalBox();
for (JRadioButton r: Arrays.asList(r1, r2, r3)) {
r.addItemListener(il);
bg.add(r);
box.add(r);
}
List<String> weeks = Arrays.asList("Sun", "Mon", "Tue", "Wed", "Thu", "Sat");
JSpinner spinner0 = new JSpinner(new SpinnerListModel(weeks));
Date date = new Date();
JSpinner spinner1 = new JSpinner(new SpinnerDateModel(date, date, null, Calendar.DAY_OF_MONTH));
spinner1.setEditor(new JSpinner.DateEditor(spinner1, "yyyy/MM/dd"));
// JTextField field = ((JSpinner.DefaultEditor) spinner1.getEditor()).getTextField();
// field.setHorizontalAlignment(SwingConstants.TRAILING);
JSpinner spinner2 = new JSpinner(new SpinnerNumberModel(5, 0, 10, 1));
// JTextField text = ((JSpinner.DefaultEditor) spinner2.getEditor()).getTextField();
// text.setHorizontalAlignment(SwingConstants.LEADING);
View in GitHub: Java, Kotlin解説
UIManager.put("Spinner.editorAlignment", SwingConstants.CENTER)
などでJSpinner
のエディタの字揃えをまとめて変更可能SwingUtilities.updateComponentTreeUI(spinner)
などでUI
プロパティを初期化するまでこの変更は反映されない
Spinner.editorAlignment
の初期値はLookAndFeel
に依存するGTKLookAndFeel
の初期値はJTextField.LEADING
BasicLookAndFeel
やWindowsLookAndFeel
の初期値はJTextField.TRAILING
JSpinner
のエディタに固有の字揃えが設定されている場合があるSpinnerListModel
のエディタはUIManager.put("Spinner.editorAlignment", ...)
で設定した字揃えに従うSpinnerDateModel
のJSpinner.DateEditor
はフォーマッタを設定するとUIManager.put("Spinner.editorAlignment", ...)
で設定した字揃えに従わずにJTextField.LEADING
になるSpinnerNumberModel
のJSpinner.NumberEditor
はコンストラクタでsetHorizontalAlignment(JTextField.RIGHT)
が実行されている
- 個別の
JSpinner
のJSpinner.DefaultEditor
からJTextField
を取得して水平方向の揃えを直接変更する方法もあるJTextField field = ((JSpinner.DefaultEditor) spinner1.getEditor()).getTextField(); field.setHorizontalAlignment(SwingConstants.CENTER);