Seeven
Seeven

Reputation: 46

Removing element from JList Java Swing

I have a JList that have elements. When I select an element and then click on complete, I want that element removed. The problem is that for the first try it gives me the message box that is supposed but does not remove the element from JList. After the second try, I only get null pointer exceptions errors.

I need some help, appreciated!

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);
            }

    }
}

Upvotes: 0

Views: 553

Answers (1)

camickr
camickr

Reputation: 324197

Get rid of the ArrayList to hold the data.

When using Swing the data is stored in a model. In the case of a JList you would use a class that implements the ListModel, typically the DefaultListModel. Any additions or removals are done directly to the DefaultListModel.

Read the section from the Swing tutorial on How to Use Lists for a working example that shows how to dynamcially add/remove items from the DefaultListModel.

Upvotes: 1

Related Questions