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

时间:2014-12-11 18:46:43

标签: java arrays jlist

正如标题所说,我有一个多个区间选择JList,我无法正确操作数据。这是我第一次使用JList,这对我来说很难。

我的GUI充当体育团队的订票界面,我所指的JList包含客户可以订购的纪念品清单。由于它是多重选择JList,如果他们愿意,他们可以选择多个纪念品。

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

  1. 提取所选纪念品,纪念品名称存放在String[]阵列
  2. 匹配存储在Double[]数组
  3. 中的并行价格数组
  4. 使用JList事件处理程序中的正确方法,然后将数据打印到textArea摘要
  5. 当我尝试将数据打印到textArea
  6. 时,消除了似乎出现的重复纪念品

    这是我的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
    

    现在,我正在尝试获取souvString中存储的内容并将其打印到textArea。我有一个添加到购物车JButton,它可以编辑GUI中的所有数据,为用户提供整体价格。我将专注于JList,因为这是给我带来麻烦的。以下是添加到购物车actionEvent()的{​​{1}}:

    JButton

    在打印纪念品时,会发生奇怪的事情。我得到了else if (ae.getSource() == cartBtn) { textArea = new JTextArea(10, 20); textArea.setFont(f2); textArea.setLineWrap(true); textArea.setOpaque(false); textArea.setWrapStyleWord(true); textArea.setEditable(false); //appending all the data from the GUI. souvString holds my JList selections textArea.setText("Team: Tigers" + "\nMeal: " + restaurant + "\n\nSeats Ordered: " + seatingType + "\nItems Ordered:" + "\n " + souvString); JOptionPane.showMessageDialog(null, textArea, "OrderReview", JOptionPane.INFORMATION_MESSAGE, new ImageIcon(Project7.class.getResource("/tigers.jpg"))); 重复纪念品的组合。我也无法弄清楚如何使用与打印的纪念品一起的价格的并行数组。并行数组看起来像:

    null

    每个价格与此阵列中相应的纪念品匹配:

    private double[] prices = {2.0, 10.0, 15.0, 25.0, 3.0, 5.0, 9.0, 8.0, 12.0, 6.0};
    

    我一直在乱搞这个约6个小时并且无法让它工作,部分地我不明白private String[] itemNames = {"mug","cap","tee shirt","sweat shirt","pennant","mini stick", "bobblehead","paper bag","foam paw","thunderstix"}; 这一切都很好,部分地说我的逻辑是有缺陷的我觉得。我尝试了一些不同的方法,但也没有用。如果有人对如何以不同的方式处理事情有一些建议,甚至有关如何正确操纵JList的一些建议/澄清,我会非常感激。我真的很想明白这一点!再次感谢堆栈用户:)

1 个答案:

答案 0 :(得分:0)

我会创建一个新的类纪念品,而不是使用两个阵列,在这里你可以用主题和价格保存你的纪念品。

class Souvenir{
     String subject;
     double price;
}

关于JList我也不太了解但我认为有一种方法你可以从JList对象获得一个普通的List,你可以使用这个列表与索引一起工作并放入Souvenir的ArrayList或类似的东西这一点。

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