如何在JOptionPane选项对话框中使用JSlider(或其他JComponent)?

时间:2017-05-07 19:07:08

标签: java swing joptionpane

我有一个UI,我想在其中显示带有滑块的弹出窗口,带有消息,让用户可以在选择值后单击“确定”或“取消”(或不选择)。 JOptionPane有各种各样的show方法,看起来它们很有用,但是我找不到让它们做我想做的事情。

这实际上是一个我必须找到答案的问题,我将在下面提供。我希望它对其他人有用。

1 个答案:

答案 0 :(得分:2)

我能够找到的例子有标准的例子:它们与我想告诉我怎么做的不够接近,并且没有足够的解释如何在我的工作上改变它们拥有。我终于遇到了一个教程,它解释了对话框中的“消息”可能是组件,而JOptionPane代码会渲染它们。这个例子使用JSlider,我假设也可以使用其他JComponents。

文档还讨论了如果你想“直接显示对话框”该怎么做,但我从未弄清楚它们的意思。

在找出以下内容之前,我偶然发现了各种形式的JOptionPane方法:

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