如何在 JOptionPane 选项对话框中使用 JSlider(或其他 JComponent)?
How can I use a JSlider (or other JComponent) in a JOptionPane option dialog?
我有一个 UI,我想在其中显示一个带有滑动条和一条消息的弹出窗口,并让用户能够在选择(或不选择)一个值后单击“确定”或“取消”。 JOptionPane 有各种看起来很有用的显示方法,但我找不到太多关于让它们做我想做的事情。
这实际上是一个我不得不四处寻找答案的问题,我将在下面提供。我希望它对其他人有用。
我能够找到的示例具有示例的标准缺陷:它们与我想要告诉我如何执行此操作的内容不够接近,并且没有充分解释事物如何改变它们靠我自己。我终于 运行 浏览了一个教程,该教程解释了对话框中的 "messages" 可以是组件,并且 JOptionPane 代码将呈现它们。此示例使用 JSlider,我假设也可以使用其他 JComponents。
文档还讨论了如果您想 "display the dialog directly" 可以做什么,但我从来没有弄清楚他们的意思。
在弄清楚以下内容之前,我偶然发现了各种形式的 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;
}
我有一个 UI,我想在其中显示一个带有滑动条和一条消息的弹出窗口,并让用户能够在选择(或不选择)一个值后单击“确定”或“取消”。 JOptionPane 有各种看起来很有用的显示方法,但我找不到太多关于让它们做我想做的事情。
这实际上是一个我不得不四处寻找答案的问题,我将在下面提供。我希望它对其他人有用。
我能够找到的示例具有示例的标准缺陷:它们与我想要告诉我如何执行此操作的内容不够接近,并且没有充分解释事物如何改变它们靠我自己。我终于 运行 浏览了一个教程,该教程解释了对话框中的 "messages" 可以是组件,并且 JOptionPane 代码将呈现它们。此示例使用 JSlider,我假设也可以使用其他 JComponents。
文档还讨论了如果您想 "display the dialog directly" 可以做什么,但我从来没有弄清楚他们的意思。
在弄清楚以下内容之前,我偶然发现了各种形式的 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;
}