带有 jList 和选项按钮的 Java 对话框

标签 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 (null, "Choose from list", "title", JOptionPane.INFORMATION_MESSAGE, null, LstArray2.toArray(), LstArray2.get(0));

我查看了以下内容,但似乎找不到我需要的内容。 http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

最佳答案

这可能不完全是您正在寻找的内容,但希望它能为您提供所需的基础或激发您自己的替代方法:

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();

请随意使用/修改以上内容,如果您有任何问题,请在下面提问

关于带有 jList 和选项按钮的 Java 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629017/

相关文章:

java - 相当于 System.exit(-1) 的 Kotlin Native

java - JSP usebean 中的异常

Java ListSelectionListener 双重改变值

java - ArrayList转JList并显示对象的特定属性

java - 如何创建带有图标和文本的 JList?

java - HSQL嵌入式连接

java - 协助构建具有多个类别的体育游戏

android - 如何通过单击对话框外部来关闭对话框?

jqueryui 打开多个对话框;应该只打开一个

Android自定义设计没有标题栏的Dialog问题