我的申请构建如下:
我正在寻找一种方法来强制JOptionPane保持打开状态,以便用户可以根据需要选择不同的东西。我想只通过单击右上角的“X”来关闭JOptionPane。如果使用JOptionPane不是最好的方法,我也愿意接受其它可能性来获得类似的结果。
以下是我正在处理的相关代码块:
try
{
CSVReader reader = new CSVReader(new FileReader(filePath), ',');
// Reads the complete file into list of tokens.
List<String[]> rowsAsTokens = null;
try
{
rowsAsTokens = reader.readAll();
}
catch (IOException e1)
{
e1.printStackTrace();
}
String[] menuChoices = { "option 1", "option 2", "option 3" };
String graphSelection = (String) JOptionPane.showInputDialog(null,
"Choose from the following options...", "Choose From DropDown",
JOptionPane.QUESTION_MESSAGE, null,
menuChoices, // Array of menuChoices
menuChoices[0]); // Initial choice
String menuSelection = graphSelection;
// Condition if first item in drop-down is selected
if (menuSelection == menuChoices[0] && graphSelection != null)
{
log.append("Generating graph: " + graphSelection + newline);
option1();
}
if (menuSelection == menuChoices[1] && graphSelection != null)
{
log.append("Generating graph: " + graphSelection + newline);
option2();
}
if (menuSelection == menuChoices[2] && graphSelection != null)
{
log.append("Generating graph: " + graphSelection + newline);
option3();
}
else if (graphSelection == null)
{
log.append("Cancelled." + newline);
}
}
答案 0 :(得分:2)
我希望窗口的选择即使在之后也能保持打开状态 用户已选择一个选项,以便他们可以选择其他选项 如果他们愿意的话如何使JOptionPane保持打开而不是 它的默认行为,一旦下拉值关闭它就会关闭 选择?
这是基本属性,默认情况下JOptionPane
被处理掉,如果没有肮脏的黑客攻击,这是不可能的,不要这样做
使用JDialog
Java & Ribbon
(可能,可能未修饰)
您可以使用JMenu
您可以将所需的选项添加到ModalityType
我认为这是{{1}}或JComboBox or JMenu with JMenuItems (very nice of ways) to the JLayer or GlassPane
答案 1 :(得分:2)
在这两个选项窗格中,我可以在关闭它之前多次更改我的选择。第3个选项窗格将显示(默认为)先前在第1个选择的值 - 当前值。
import java.awt.*;
import javax.swing.*;
class Options {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
Object[] options = {
"Option 1",
"Option 2",
"Option 3",
"None of the above"
};
JComboBox optionControl = new JComboBox(options);
optionControl.setSelectedIndex(3);
JOptionPane.showMessageDialog(null, optionControl, "Option",
JOptionPane.QUESTION_MESSAGE);
System.out.println(optionControl.getSelectedItem());
String graphSelection = (String) JOptionPane.showInputDialog(
null,
"Choose from the following options...",
"Choose From DropDown",
JOptionPane.QUESTION_MESSAGE, null,
options, // Array of menuChoices
options[3]); // Initial choice
System.out.println(graphSelection);
// show the combo with current value!
JOptionPane.showMessageDialog(null, optionControl, "Option",
JOptionPane.QUESTION_MESSAGE);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
SwingUtilities.invokeLater(r);
}
}
我认为迈克尔猜对了JList
。以下是list&amp; combo。
请注意JList
&amp; JComboBox
可以使用组合中看到的渲染器。重要的区别是列表是一个支持多选的嵌入式组件。
答案 2 :(得分:1)
以下解决方案不会为您提供下拉菜单,但可以选择多个值。
您可以使用JList
存储您的选择并使用JOptionPane.showInputMessage
,如下所示:
JList listOfChoices = new JList(new String[] {"First", "Second", "Third"});
JOptionPane.showInputDialog(null, listOfChoices, "Select Multiple Values...", JOptionPane.QUESTION_MESSAGE);
在getSelectedIndices()
之后listOfChoices
上使用方法JOptionPane.showInputDialog()
将返回包含从JList
中选择的索引的整数数组,并且您可以使用{ {1}}获取他们的值:
ListModel