2015-11-04 5 views
0

Я искал сайт и не смог найти то, что искал. Я попробовал метод JSpinner setAlignmentX(JSpinner.CENTER_ALIGNMENT), а также попытался установить предпочтительную ширину в 10, но это не сработало. Я хочу, чтобы JSpinners горизонтально сосредоточился на Jpanel.Как горизонтально центр JSpinner

Вот мой код:

JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
JSpinner[] spinners = new JSpinner[10]; 

    for (int i = 0; i < spinners.length; i++) { 
     spinners[i] = WidgetFactory.createJSpinnerAndAddToPanel(panel); 
    } 

    frame.add(panel, BorderLayout.CENTER); 

и его WidgetFactory:

public static JSpinner createJSpinnerAndAddToPanel(JPanel panel) { 
    JSpinner spinner = new JSpinner(); 
    Dimension preferredSize = spinner.getPreferredSize(); 
    preferredSize.width = 10; 
    spinner.setPreferredSize(preferredSize); 
    spinner.setAlignmentX(JSpinner.CENTER_ALIGNMENT); 
    panel.add(spinner); 
    return spinner; 
} 

Это то, что я получаю:

this is what i get

ответ

3

BoxLayout будет расти компонент в пространстве доступный. Чтобы предотвратить вертушку от выращивания необходимо контролировать максимальный размер:

JSpinner spinner=new JSpinner() 
{ 
    @Override 
    public Dimension getMaximumSize() 
    { 
     return getPreferredSize(); 
    } 
}; 

Вам не нужно выравнивание набора, так как по умолчанию центр выравнивания для блесны.

//spinner.setPreferredSize(preferredSize); 

Обратите внимание, что это не рекомендуется контролировать предпочтительный размер. Пусть каждый LAF определяет соответствующий размер.

+0

Да, спасибо большое. я узнал что-то новое. –

Смежные вопросы