6

My question is self explanatory: how to center the text of a JSpinner? the methode setHorizontalAligment is not there. I also tried setAlignmentX, still nothing... Any help would be appreciated c:

mKorbel
  • 109,525
  • 20
  • 134
  • 319
user3342795
  • 105
  • 3
  • 6

1 Answers1

15

JSpinner is a container of other components, one of which is a the editor.

JSpinner spinner = ...;
JComponent editor = spinner.getEditor();

But that doesn't help us, as setHorizontalAligment isn't a method of JComponent.

You can then inspect the editor type of component it is...

if (editor instanceof JSpinner.DefaultEditor) {

If it's a JSpinner.DefaultEditor, you can cast it and use setHorizontalAlignment...

JSpinner.DefaultEditor spinnerEditor = (JSpinner.DefaultEditor)editor;
spinnerEditor.getTextField().setHorizontalAlignment(JTextField.CENTER);

Potentionally you may also need to check for JTextField as well, but if you're using the default editor models, it would normally return JSpinner.DefaultEditor

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
  • sadly, the JSpinner doesn't seem to have an instance of JTextField... But thanks for the quick answer! – user3342795 Mar 28 '14 at 00:43
  • Thanks you very much! This worked just fine! I hated the text to be on the right somehow. Thanks again! :) – user3342795 Mar 28 '14 at 00:52
  • 1
    @user3342795 Yeah, love spinners :P – MadProgrammer Mar 28 '14 at 00:52
  • I'd like to add a couple of things to this answer: 1) The reason for this behavior is that [apparently](http://undocumentedmatlab.com/blog/using-spinners-in-matlab-gui#comment-367963) the `JSpinner` component creates its internal `TextField` using the parent control’s property values when it is first rendered, and then ignores changes to the parent property values. 2) If working with JComponents in MATLAB, it is sufficient to call e.g. `jSpinner.getEditor.getTextField.setHorizontalAlignment(javax.swing.JTextField.LEFT);` to get the desired effect. – Dev-iL May 09 '16 at 09:44
  • `jSpinner.getEditor.getTextField.setHorizontalAlignment(javax.swing.JTextField.L‌​EFT);` ... which is basically what the answer says – MadProgrammer May 09 '16 at 10:10