不能使用 getSelectedIndex(),因为列表为空



我正在做一个学校项目,我试图在一个列表中获得一个选定项目的位置和值。当尝试这样做时,我得到错误"不能调用";javax.swing.JList.getSelectedIndex()&;因为"this.newList"是零"。我很确定这与单元渲染器实际上没有将项目添加到列表中有关,但我不确定如何修复它。


class OrderHandlePanel extends JPanel implements ActionListener {
private DefaultListModel newModel, cancelModel;
private JButton right, left;
private JList newList, cancelledList;
OrderHandlePanel() {
newModel = new DefaultListModel();
setLayout(new GridLayout(1,3));
JPanel newOrders = new JPanel(new GridLayout(3,1));
JLabel newOrder = new JLabel("New Order");
JLabel orderAmount = new JLabel("Ordered Amt: ");
JList newList = new JList(newModel);
newList.setCellRenderer(new listCellRenderer());
JScrollPane newScrollPane = new JScrollPane(newList);
JPanel buttons = new JPanel();
JButton right = new JButton("=>");
JButton left = new JButton("<=");
newOrders.add(newOrder);
newOrders.add(newScrollPane);
newOrders.add(orderAmount);
right.addActionListener(this);
left.addActionListener(this);
right.setActionCommand("moveRight");
left.setActionCommand("moveLeft");
buttons.add(right);
buttons.add(left);
add(newOrders);
add(buttons);
}
private class listCellRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Order order = (Order) value;
String orderText = "<html>Name: " + order.getName() 
+ "<br/>Quantity: " + order.getQuantity() 
+ "<br/>Price" + order.getPrice() 
+ "<br/>Total Cost: " + order.getTotalCost()
+ "<br/> ";
setText(orderText);
return this;
}
}
public void update() {
newModel.clear();
cancelModel.clear();
for (byte i = 0; i < OrderContainer.getPosition(); i++) {
Order order = OrderContainer.getOrder(i);
if (order.getType().equals("New"))
newModel.addElement(order);
else if (order.getType().equals("Cancelled"))
cancelModel.addElement(order);
}
}

@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = ((JButton) e.getSource()).getActionCommand();

switch (actionCommand) {
case "moveRight":
int newIndex = newList.getSelectedIndex();
System.out.println(newList.getSelectedValue());
break;
case "moveLeft":
int cancelIndex = cancelledList.getSelectedIndex();
System.out.println(cancelledList.getSelectedValue());
break;
}
}
}

从jlistnewlist中删除Jlist。当你想将类变量设置为新对象时,你定义了一个局部变量。

因此,

JList newList = new JList(newModel);

将成为

newList = new JList(newModel);

相关内容