从JList Java Swing中删除元素

问题描述 投票:0回答:1

我有一个包含元素的JList。当我选择一个元素然后单击完成时,我希望将该元素删除。问题是,第一次尝试时,它会给我一个消息框,但该消息框并未从JList中删除该元素。在第二次尝试之后,我仅收到空指针异常错误。

我需要一些帮助,感激!

package gui;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import app.Order;
import java.awt.Font;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class CompleteOrder extends JFrame implements ActionListener
{

    private static final long serialVersionUID = 1L;

    public JFrame frmOrderManagement;
    private JList list;
    private Order[] ord_arr;
    private ArrayList<Object> arr;
    private JScrollPane scrollBar;

    public CompleteOrder() 
    {

        int orders_count = 2; // TODO functie ce returneaza numarul de inregistrari 

        app.Order x1 = new app.Order("Mihail Cioara", "AFV5G6HJ32","Corona 0.33",new app.Adress("Corona LTD", "Romania", "Bucuresti", "Macilor 66, Ap.5, Sc.A", "300351A"), new app.Adress("Corona LTD", "Romania", "Bucuresti", "Macilor 66, Ap.5, Sc.A", "300351A"), 1, 66,true, true, false, false);
        app.Order x2 = new app.Order("Mihail Cioara", "bbbbbbbbbb","Corona 0.33",new app.Adress("Corona LTD", "Romania", "Bucuresti", "Macilor 66, Ap.5, Sc.A", "300351A"), new app.Adress("Corona LTD", "Romania", "Bucuresti", "Macilor 66, Ap.5, Sc.A", "300351A"), 1, 66,true, true, false, false);

        ord_arr = new Order[orders_count]; // TODO functie ce returneaza un array de order

        // for(int i=0;i<orders_count;i++)
        // {
        //  ord_arr[i]=x1;
        // }
        ord_arr[0]=x1;
        ord_arr[1]=x2;

        arr = new ArrayList<Object>();

        // for(int i=0;i<orders_count;i++)
        // {
        //  arr.add(x1.JLiString());
        // }

        arr.add(x1.JLiString());
        arr.add(x2.JLiString());


        frmOrderManagement = new JFrame();
        frmOrderManagement.setResizable(false);
        frmOrderManagement.setTitle("Order Management");
        frmOrderManagement.setBounds(100, 100, 643, 584);
        frmOrderManagement.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmOrderManagement.getContentPane().setLayout(null);

        JLabel lblNewLabel = new JLabel("Complete/View Order/s");
        lblNewLabel.setFont(new Font("Courier New", Font.BOLD, 24));
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setBounds(140, 0, 331, 67);
        frmOrderManagement.getContentPane().add(lblNewLabel);

        list = new JList(arr.toArray());
        list.setLayoutOrientation(JList.VERTICAL);
        // list.setToolTipText("");
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        JScrollPane scrollBar = new JScrollPane(list);
        scrollBar.setVisible(true);
        scrollBar.setBounds(10, 81, 600, 400);
        frmOrderManagement.getContentPane().add(scrollBar);
        scrollBar.add(list);
        scrollBar.setViewportView(list);

        JButton btnNewButton = new JButton("Complete");
        btnNewButton.setBounds(10, 500, 109, 44);
        frmOrderManagement.getContentPane().add(btnNewButton);
        btnNewButton.addActionListener(this);

        JButton btnMenu = new JButton("Menu");
        btnMenu.setBounds(518, 500, 109, 44);
        frmOrderManagement.getContentPane().add(btnMenu);
    }

    public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand() == "Complete")
            {
                String chosen =  list.getSelectedValue().toString();

                int index = list.getSelectedIndex();
                // System.out.println("indexul: " + index);

                // String cod = ord_arr[index].getCode();  
                // System.out.println(cod);

                arr.remove(index);

                list = new JList(arr.toArray());
                scrollBar = new JScrollPane(list);

                MessageBox x = new MessageBox(chosen + "  A fost completat",900);
                x.frmOrderManagement.setVisible(true);
            }

    }
}
java swing jframe jlist
1个回答
0
投票

摆脱ArrayList来保存数据。

使用Swing时,数据存储在模型中。对于JList,您将使用实现ListModel的类,通常是DefaultListModel。任何添加或删除都直接在DefaultListModel中进行。

阅读有关How to Use Lists的Swing教程中的部分,以了解如何从DefaultListModel动态添加/删除项目的工作示例。

© www.soinside.com 2019 - 2024. All rights reserved.