2012-04-01 8 views
1

Ich versuche, eine JSpinner in einem JOptionPane setzen sich wie folgt,JSpinner nimmt gesamte Breite in JOptionPane bis

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

Dies funktioniert, aber das einzige Problem ist, dass die JSpinner die Breite des Dialog füllt, unabhängig davon, die Größe, die ich eingestellt habe. Ich habe versucht, setPreferredSize() auch zu verwenden. Wie behebe ich das?

Antwort

5

Warum nicht stattdessen einfach in ein 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); 

Obwohl ich selbst, ich weiß nicht, dass ich eine JDialog dafür schaffen würde, sondern würde die JOptionPane.showConfirmDialog(...) Methode einfach an:

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

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

    int selection = JOptionPane.showConfirmDialog(frame, panel, "Change Sa Key", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
    if (selection == JOptionPane.OK_OPTION) { 
    System.out.println("Sa Key is: " + saModel.getValue().toString()); 
    } 
+2

Ja, ich auf die showConfirmDialog Methode tatsächlich eingeschaltet vor Du hast sogar deine Antwort gepostet. Aber Ihre JPanel-Methode funktioniert gut, also werde ich Ihre Antwort akzeptieren, sobald SO es mir erlaubt :) – gsingh2011

+0

'JPanel panel = new JPanel();' Huh. Sehr elegant - ein linksbündiges 'FlowLayout'. Kurz und gut. Ich werde immer nervös, wenn ich das Standardlayout einer Komponente akzeptiere, und mich an Suns Entscheidung erinnern, den Standard eines Frames von 'FlowLayout' auf' BorderLayout' um 1,5 (?) Zu ändern. –

+0

+1 Mehr zu 'JSpinner' Layout in diesem [Q & A] (http://stackoverflow.com/q/7374659/230513). – trashgod