2015-11-04 201 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

是啊,非常感谢。我学到了一些新东西。 –