我有一个带有物体的arraylist和一个正在运行的Gui。我正在寻找一种方法来弹出一个小框架或框或类似于显示arraylist中的对象的方法。用户现在应该能够选择一个或多个随后返回的项目。
我已经有了选项窗格,但我只能选择一个对象
Object[] possibilities = lr.declarationList.toArray();
String s = (String)JOptionPane.showInputDialog(
gui.getFrame(),
"Choose Target Nodes",
"Customized Dialog",
JOptionPane.PLAIN_MESSAGE,
null,
possibilities,
null);
也许弹出列表会有所帮助。
答案 0 :(得分:9)
尝试将JOptionPane.showMessageDialog(...)
与JList组件参数一起使用,该参数的元素来自列表,例如:
JList list = new JList(new String[] {"foo", "bar", "gah"});
JOptionPane.showMessageDialog(
null, list, "Multi-Select Example", JOptionPane.PLAIN_MESSAGE);
System.out.println(Arrays.toString(list.getSelectedIndices()));
请注意,如果您在消息对象本身中需要更多布局项,则可以将它们全部打包到JPanel中,并将该组件用作消息参数。
答案 1 :(得分:0)
以下是使用JCheckBox
的版本:
import javafx.util.Pair;
public static <T> List<T> select(Component parent, String message, List<T> variants) {
List<Pair<JCheckBox, T>> boxes = variants
.stream()
.map(variant -> new Pair<>(new JCheckBox(String.valueOf(variant)), variant))
.collect(Collectors.toList());
JPanel panel = new JPanel(new GridBagLayout());
boxes.forEach(p -> panel.add(p.getKey(),
new GridBagConstraints(
0,
boxes.indexOf(p),
1,
1,
1.0,
1.0,
GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0),
0,
0
)
));
JOptionPane.showMessageDialog(parent, panel, message, JOptionPane.PLAIN_MESSAGE);
return boxes.stream()
.filter(p -> p.getKey().isSelected())
.map(Pair::getValue)
.collect(Collectors.toList());
}