Java JSpinner在JOptionPane中占据整个宽度

Java JSpinner在JOptionPane中占据整个宽度,java,swing,width,joptionpane,jspinner,Java,Swing,Width,Joptionpane,Jspinner,我正试图在JOptionPane中放置一个JSpinner,如下所示 SpinnerModel saModel = new SpinnerNumberModel(11, 1, 36, 1); JSpinner saSpinner = new JSpinner(saModel); Dimension d = saSpinner.getSize(); d.width = 20; saSpinner.setSize(d);

我正试图在JOptionPane中放置一个JSpinner,如下所示

        SpinnerModel saModel = new SpinnerNumberModel(11, 1, 36, 1);
        JSpinner saSpinner = new JSpinner(saModel);
        Dimension d = saSpinner.getSize();
        d.width = 20;
        saSpinner.setSize(d);

        Object[] message = { "Choose the key number for sa.", saSpinner };

        JOptionPane optionPane = new JOptionPane(message,
                JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
        JDialog dialog = optionPane.createDialog(frame, "Change Sa Key");
        dialog.setVisible(true);

这是可行的,但唯一的问题是,无论我设置的大小如何,JSpinner都会填充对话框的宽度。我也尝试过使用setPreferredSize。如何修复此问题?

为什么不将其放在JPanel中

  SpinnerModel saModel = new SpinnerNumberModel(11, 1, 36, 1);
  JSpinner saSpinner = new JSpinner(saModel);
  Dimension d = saSpinner.getSize();
  d.width = 20;
  saSpinner.setSize(d);

  // Object[] message = { "Choose the key number for sa.", saSpinner };

  JPanel panel = new JPanel();
  panel.add(new JLabel("Choose the key number for sa:"));
  panel.add(saSpinner);

  JOptionPane optionPane = new JOptionPane(panel,
          JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
  JDialog dialog = optionPane.createDialog(frame, "Change Sa Key");
  dialog.setVisible(true);
虽然我自己也不知道我会为此创建一个JDialog,但我只会显示JOptionPane.showConfirmDialog。。。方法:


为什么不把它放在一个JPanel里呢

  SpinnerModel saModel = new SpinnerNumberModel(11, 1, 36, 1);
  JSpinner saSpinner = new JSpinner(saModel);
  Dimension d = saSpinner.getSize();
  d.width = 20;
  saSpinner.setSize(d);

  // Object[] message = { "Choose the key number for sa.", saSpinner };

  JPanel panel = new JPanel();
  panel.add(new JLabel("Choose the key number for sa:"));
  panel.add(saSpinner);

  JOptionPane optionPane = new JOptionPane(panel,
          JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
  JDialog dialog = optionPane.createDialog(frame, "Change Sa Key");
  dialog.setVisible(true);
虽然我自己也不知道我会为此创建一个JDialog,但我只会显示JOptionPane.showConfirmDialog。。。方法:


是的,在你发布答案之前,我实际上已经切换到了showConfirmDialog方法。但是您的JPanel方法非常有效,所以只要so允许,我会尽快接受您的答案:JPanel panel=newJPanel;呵呵。非常优雅-左对齐的FlowLayout。又短又甜。不过,我总是对接受组件的默认布局感到紧张,回忆起Sun决定将框架的默认布局从FlowLayout更改为BorderLayout,大约1.5.+1更多关于JSpinner布局的内容。是的,我实际上在你发布答案之前就切换到了showConfirmDialog方法。但是您的JPanel方法非常有效,所以只要so允许,我会尽快接受您的答案:JPanel panel=newJPanel;呵呵。非常优雅-左对齐的FlowLayout。又短又甜。不过,我总是对接受组件的默认布局感到紧张,回忆起Sun决定将框架的默认布局从FlowLayout更改为BorderLayout,大约1.5.+1更多关于JSpinner布局的内容。