Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从多间隔JList中提取和操作数据以在textArea/JOptionPane中使用_Java_Arrays_Jlist - Fatal编程技术网

Java 从多间隔JList中提取和操作数据以在textArea/JOptionPane中使用

Java 从多间隔JList中提取和操作数据以在textArea/JOptionPane中使用,java,arrays,jlist,Java,Arrays,Jlist,正如标题所说,我有一个多区间选择列表,我在正确操作数据时遇到了问题。这是我第一次使用JList,这对我来说很困难 我的GUI充当运动队的门票订购界面,我所指的JList包含客户可以订购的纪念品列表。由于这是一个多选列表,他们可以选择多个纪念品,如果他们这样选择 我的问题是从JList中提取项目,并将其正确打印到JOptionPane textArea窗口,该窗口用作用户订单的摘要。以下是我的目标/问题的分类: 提取选定的纪念品,其中纪念品的名称存储在字符串[]数组中 匹配并行价格数组,存储在双[

正如标题所说,我有一个多区间选择列表,我在正确操作数据时遇到了问题。这是我第一次使用JList,这对我来说很困难

我的GUI充当运动队的门票订购界面,我所指的JList包含客户可以订购的纪念品列表。由于这是一个多选列表,他们可以选择多个纪念品,如果他们这样选择

我的问题是从JList中提取项目,并将其正确打印到JOptionPane textArea窗口,该窗口用作用户订单的摘要。以下是我的目标/问题的分类:

提取选定的纪念品,其中纪念品的名称存储在字符串[]数组中 匹配并行价格数组,存储在双[]数组中 使用JList事件处理程序中的适当方法,然后将数据打印到textArea摘要 消除在我尝试将数据打印到文本区域时出现的重复纪念品 以下是我的JList的创建:

souvenirList = new JList(itemNames); //itemNames is an array of Strings[] for souvenirs
souvenirList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
souvenirList.setLayoutOrientation(JList.VERTICAL);

scrollPane = new JScrollPane(souvenirList);
scrollPane.setPreferredSize(new Dimension(200,100));

gbc3.gridx = 1;
gbc3.gridy = 1;
centerPanel.add(scrollPane, gbc3);

c.add(centerPanel, BorderLayout.CENTER);
以下是我的JList事件处理程序:

private class ListHandler implements ListSelectionListener
{
    public void valueChanged(ListSelectionEvent le)
    {
        boolean adjust = souvenirList.getValueIsAdjusting();

        if (!adjust)
        {
            //not sure if/how I should use this
            souvIndex = souvenirList.getSelectedIndices();
            //I know this is depreciated, I dont know another way 
            souvItems = souvenirList.getSelectedValues();

            for (int i = 0; i < souvItems.length; i++)
            {
                System.out.println(souvItems[i] + "\n");
                //my attempt to save the souvenirs to an accumlator, doesnt work right
                souvString += souvItems[i];
            }
        }
    }
}//end List handler
当它打印纪念品时,奇怪的事情发生了。我得到的是空的和重复的纪念品。我也不知道如何使用与打印的纪念品一起提供的平行排列的价格。并行阵列如下所示:

private double[] prices = {2.0, 10.0, 15.0, 25.0, 3.0, 5.0, 9.0, 8.0, 12.0, 6.0};
每个价格与此阵列对应的纪念品匹配:

private String[] itemNames = {"mug","cap","tee shirt","sweat shirt","pennant","mini stick",
                            "bobblehead","paper bag","foam paw","thunderstix"};

我已经花了大约6个小时来处理这个问题,但无法让它工作,部分原因是我不太理解JLists,部分原因是我觉得我的逻辑有缺陷。我尝试过几种不同的方法,但都不管用。如果有人对我如何以不同的方式处理问题提出了一些建议,甚至对如何正确操作JList提出了一些建议/澄清,我会非常感激。我真的很想明白这一点!再次感谢stack用户:

我将创建一个新的类纪念品,您可以在其中保存带有主题和价格的纪念品,而不是使用两个数组

class Souvenir{
     String subject;
     double price;
}
关于JList,我也不太了解,但我认为有一种方法可以从JList对象中获得一个普通列表,使用此列表,您可以使用索引并将其放入纪念品或类似物品的数组列表中


这只是一个想法,我真的不能给你一个例子,所以如果其他人可以验证这一点,我也会感兴趣:

谢谢你的建议!我确实想到了创建一个新类。也许我会玩一下,看看:
class Souvenir{
     String subject;
     double price;
}