2017-05-07 2 views
1

Ich habe eine Benutzeroberfläche, in der ich ein Popup mit einem Schieberegler anzeigen möchte, mit einer Nachricht, und den Benutzer in der Lage, nach Auswahl eines Wertes auf OK oder Abbrechen klicken (oder nicht). JOptionPane hat verschiedene Show-Methoden, die scheinen, als wären sie nützlich, aber ich konnte nicht viel darüber finden, dass sie machen, was ich will.Wie kann ich einen JSlider (oder eine andere JComponent) in einem JOptionPane-Optionsdialog verwenden?

Dies ist eigentlich eine Frage, die ich root um eine Antwort zu finden, und ich werde es unten zur Verfügung stellen. Ich hoffe, dass es für jemand anderen nützlich sein wird.

Antwort

2

Die Beispiele, die ich finden konnte, hatten den Standardfehler von Beispielen: Sie waren nicht nah genug an dem, was ich mir sagen wollte, und sagten nicht genug darüber, wie die Dinge funktionierten, um sie zu verändern mein eigenes. Ich stieß schließlich auf ein Tutorial, das erklärte, dass die "Nachrichten" im Dialog Komponenten sein könnten, und der JOptionPane-Code würde sie rendern. In diesem Beispiel wird ein JSlider verwendet. Ich nehme an, dass auch andere JComponents verwendet werden können.

Die Dokumentation spricht auch darüber, was zu tun ist, wenn Sie "den Dialog direkt anzeigen möchten", aber ich habe nie herausgefunden, was sie damit meinten.

Ich stolperte um in verschiedenen Formen von JOptionPane Verfahren vor dem folgenden herauszufinden:

/** 
* display the dialog for entering the number of spots to move the first 
* marble chosen after a 7 is played. Returns 0 if the user cancelled this 
* operation. 
*/ 
@Override 
public int getMoveCount() 
{ 
    int moveCount = 0; 

    JSlider slider = createSlider(); 
    JPanel sliderPanel = createSliderPanel("myMessage", slider); 
    String title = "myTitle"; 
    int dialogResponse = JOptionPane.showOptionDialog 
      (this,     // I'm within a JFrame here 
      sliderPanel, 
      title, 
      JOptionPane.OK_CANCEL_OPTION, 
      JOptionPane.QUESTION_MESSAGE, 
      null, null, null 
      ); 
    if (JOptionPane.OK_OPTION == dialogResponse) 
     { moveCount = slider.getValue(); } 
    else { moveCount = 0; } // works for cancel button, red 'x', and keyboard escape key 

    return moveCount; 
} 

private JSlider createSlider() 
{ 
    JSlider slider = new JSlider(1,7); 
    slider.setMajorTickSpacing(1); 
    slider.setPaintTicks(true); 
    slider.setPaintLabels(true); 
    slider.setValue(7);    // default to 7 

    return slider; 
} 
Verwandte Themen