如何水平居中 JSpinner

How to horizontally center JSpinner

我搜索了网站,但找不到我要找的东西。我试过JSpinner的setAlignmentX(JSpinner.CENTER_ALIGNMENT)方法,也试过设置preferred width为10,但是没有用。我希望 JSpinners 水平居中于 Jpanel。

这是我的代码:

 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;
}

这是我得到的:

BoxLayout 会将组件增长到 space 可用。为了防止旋转器变大,您需要控制最大尺寸:

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

您不需要设置对齐方式,因为微调器的默认对齐方式是居中对齐。

//spinner.setPreferredSize(preferredSize);

请注意,控制首选大小不是一个好主意。让每个LAF决定合适的尺寸。