带有jList和option按钮的Java对话框
我想要一个包含用于用户选择的JList的对话框。虽然下面将这样做,我也想一条消息和一个“取消”按钮带有jList和option按钮的Java对话框,java,dialog,jlist,netbeans-8,Java,Dialog,Jlist,Netbeans 8,我想要一个包含用于用户选择的JList的对话框。虽然下面将这样做,我也想一条消息和一个“取消”按钮 list = new JList(LstArray1.toArray()); JOptionPane.showMessageDialog( null, list, "Title", JOptionPane.INFORMATION_MESSAGE); 更像这样,但将组合框更改为JList String input = (String) JOptionPane.showInputDialog (n
list = new JList(LstArray1.toArray());
JOptionPane.showMessageDialog(
null, list, "Title", JOptionPane.INFORMATION_MESSAGE);
更像这样,但将组合框更改为JList
String input = (String) JOptionPane.showInputDialog (null, "Choose from list", "title", JOptionPane.INFORMATION_MESSAGE, null, LstArray2.toArray(), LstArray2.get(0));
我看了以下内容,但似乎找不到我所需要的。
这可能不是您想要的,但希望它能为您的需求提供基础,或激发您自己的替代方法:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ListDialog {
private JList list;
private JLabel label;
private JOptionPane optionPane;
private JButton okButton, cancelButton;
private ActionListener okEvent, cancelEvent;
private JDialog dialog;
public ListDialog(String message, JList listToDisplay){
list = listToDisplay;
label = new JLabel(message);
createAndDisplayOptionPane();
}
public ListDialog(String title, String message, JList listToDisplay){
this(message, listToDisplay);
dialog.setTitle(title);
}
private void createAndDisplayOptionPane(){
setupButtons();
JPanel pane = layoutComponents();
optionPane = new JOptionPane(pane);
optionPane.setOptions(new Object[]{okButton, cancelButton});
dialog = optionPane.createDialog("Select option");
}
private void setupButtons(){
okButton = new JButton("Ok");
okButton.addActionListener(e -> handleOkButtonClick(e));
cancelButton = new JButton("Cancel");
cancelButton.addActionListener(e -> handleCancelButtonClick(e));
}
private JPanel layoutComponents(){
centerListElements();
JPanel panel = new JPanel(new BorderLayout(5,5));
panel.add(label, BorderLayout.NORTH);
panel.add(list, BorderLayout.CENTER);
return panel;
}
private void centerListElements(){
DefaultListCellRenderer renderer = (DefaultListCellRenderer) list.getCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
}
public void setOnOk(ActionListener event){ okEvent = event; }
public void setOnClose(ActionListener event){
cancelEvent = event;
}
private void handleOkButtonClick(ActionEvent e){
if(okEvent != null){ okEvent.actionPerformed(e); }
hide();
}
private void handleCancelButtonClick(ActionEvent e){
if(cancelEvent != null){ cancelEvent.actionPerformed(e);}
hide();
}
public void show(){ dialog.setVisible(true); }
private void hide(){ dialog.setVisible(false); }
public Object getSelectedItem(){ return list.getSelectedValue(); }
}
用法示例:
JList list = new JList(new String[] {"foo", "bar", "foobar"});
ListDialog dialog = new ListDialog("Please select an item in the list: ", list);
dialog.setOnOk(e -> System.out.println("Chosen item: " + dialog.getSelectedItem()));
dialog.show();
请随意使用/修改上面的内容,如果您有任何问题,请在下面询问,这正是我所需要的,通过一些调整,如文本大小,它就完成了任务。谢谢。刚刚发现一个错误;如何选择“取消”选项。类似dialog.setOnClose(e->goto end)的内容,在dialog.setOnOk和dialog.show之间切换。在一个地方,一旦用户从列表中选择了一个项目,就会有更多的代码。或者我必须将值放入字符串中并检查是否为null。setOnOk/setOnClose调用确定单击这些按钮时应该发生什么。他们不会立即执行。只要在显示对话框之前设置它们,就应该可以了,因为在按钮具有任何功能之前,没有机会单击按钮。TA可以从那里对其进行排序。