【问题标题】:Get the selected values from JList in Java从 Java 中的 JList 中获取选定的值
【发布时间】:2015-03-04 11:05:40
【问题描述】:

如何从 Jlist 中获取选定的值? 我尝试了以下代码,但所有变量都显示为空。 为什么索引变量为空?

 public class GetSelectedValueFromJList extends JFrame implements ActionListener {
    private JList list;
    private JButton checkButton;

    public GetSelectedValueFromJList() {



        String[] nameList = { "Value 1", "Value 2", "Value 3", "Value 4", "Value 5"};
        list = new JList(data);
        checkButton = new Button("Check");
        button.addActionListener(this);

        //add list to frame
        add(list);
        add(checkButton);

    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getCommand().equals("Check"))
        {
            int index = list.getSelectedIndex();
            System.out.println("Index Selected: " + index);
            String s = (String) list.getSelectedValue();
            System.out.println("Value Selected: " + s);
        }
    }

【问题讨论】:

  • 1) 使用逻辑一致的形式缩进代码行和块。缩进是为了让代码流更容易理解! 2) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • checkButton = new Button("Check"); 不要混合使用 Swing 和 AWT。使用 Swing JButton
  • if(e.getCommand().equals("Check")) BTW - 该代码(以及其他部分)即使完整并带有导入,也不会编译。不要发布“类似”正在使用的代码,这会浪费您的时间,以及其他试图提供帮助的人的时间(免费)。复制/粘贴适当的 MCVE。

标签: java swing actionlistener jlist


【解决方案1】:

最初在JList 中没有选择任何元素,因此如果您不从列表中选择元素,则返回的索引将为-1,返回值将为空。 试试这段代码并从列表中选择和元素,然后测试它是否有效:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;

public class Frame extends JFrame implements ActionListener
{
    private JList list;
    private JButton checkButton;

    public Frame()
    {
        setBounds(100,100,300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String[] nameList = { "Value 1", "Value 2", "Value 3", "Value 4", "Value 5" };
        list = new JList(nameList);
        checkButton = new JButton("Check");
        checkButton.addActionListener(this);

        // add list to frame
        JPanel panel = new JPanel();
        panel.add(list);
        panel.add(checkButton);
        add(panel);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new Frame();
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("Check"))
        {
            int index = list.getSelectedIndex();
            System.out.println("Index Selected: " + index);
            String s = (String) list.getSelectedValue();
            System.out.println("Value Selected: " + s);
        }
    }
}

【讨论】:

  • 无论选择的 JList 元素如何,索引为 -1,选择的值为 null。
  • @AdrianTrifan 我测试了上面给定的示例,它工作正常,我认为您还有另一段代码可以重置您的 JList。
  • “无论选择的 JList 元素如何,索引为 -1,选择的值为 null。” 然后按照我一小时前的建议发布一个可编译且可运行的示例,然后发布两个其他人已经这样做了!
【解决方案2】:

这不是答案,因为它并没有真正解决所述问题。因此,我将不得不尽快将其删除。我发布它是为了显示该代码的一个轻微变体(作为MCVE),以证明在输出中没有看到null如果选择了列表中的项目 。好吧,那是为了鼓励你发布一个MCVE 的代码,它实际上显示了所陈述的问题。

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

public class GetSelectedValueFromJList
        extends JFrame implements ActionListener {

    private JList list;
    private JButton button;

    public GetSelectedValueFromJList() {
        String[] nameList = {
            "Value 1", "Value 2", "Value 3", "Value 4", "Value 5"
        };
        list = new JList(nameList);
        list.setSelectedIndex(2);

        button = new JButton("Check");
        button.addActionListener(this);

        add(list);
        add(button, BorderLayout.PAGE_END);

        pack();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Check")) {
            int index = list.getSelectedIndex();
            System.out.println("Index Selected: " + index);
            String s = (String) list.getSelectedValue();
            System.out.println("Value Selected: " + s);
        }
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                new GetSelectedValueFromJList().setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

    【解决方案3】:

    此代码将获得多个选定值...

     int[] selectedIndices = jList1.getSelectedIndices();
    String[] myArray = new String[50];
    for (int i = 0; i < selectedIndices.length; i++) {
                   myArray[i] =  String.valueOf(jList1.getModel().getElementAt(selectedIndices[i]));
            }
    

    这段代码将得到一个值...

    String myString = String.valueOf(jList1.getModel().getElementAt(jList1.getSelectedIndex());
    

     String myString = String.valueOf(jList1.getSelectedValue());
    

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 2014-08-05
      • 2016-10-05
      • 2014-11-14
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多