我正在研究一個學校專案,并試圖獲取串列中所選專案的位置和值。嘗試這樣做時,我收到錯誤“無法呼叫“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;
}
}
}
uj5u.com熱心網友回復:
從 JList newList 中洗掉 Jlist。當您想將類變數設定為該新物件時,您正在定義一個區域變數。
因此
JList newList = new JList(newModel);
會變成
newList = new JList(newModel);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326956.html
上一篇:如何在Java中訪問另一個檔案或類上的JButton
下一篇:為什么GUI內容不可見?
