正如标题所说,我有一个多个区间选择JList
,我无法正确操作数据。这是我第一次使用JList
,这对我来说很难。
我的GUI充当体育团队的订票界面,我所指的JList
包含客户可以订购的纪念品清单。由于它是多重选择JList
,如果他们愿意,他们可以选择多个纪念品。
我的问题是从JList中提取项目并将其正确打印到JOptionPane
textArea
窗口,该窗口充当用户订单的摘要。以下是我的目标/问题的细分:
String[]
阵列Double[]
数组textArea
摘要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
现在,我正在尝试获取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的一些建议/澄清,我会非常感激。我真的很想明白这一点!再次感谢堆栈用户:)
答案 0 :(得分:0)
我会创建一个新的类纪念品,而不是使用两个阵列,在这里你可以用主题和价格保存你的纪念品。
class Souvenir{
String subject;
double price;
}
关于JList我也不太了解但我认为有一种方法你可以从JList对象获得一个普通的List,你可以使用这个列表与索引一起工作并放入Souvenir的ArrayList或类似的东西这一点。
这只是一个想法我真的不能给你一个例子,所以如果其他人可以验证这个我也会感兴趣:)