简体   繁体   中英

add from one jlist to another

I have been doing research on here and have been searching for a solution to the problem. I am new to java so I don't know all of the syntax. I am trying to get my code to transfer items from one jlist to another using the buttons in-between the jlists. The left list has the items to begin with. The code is suppose to move items from the left list to the right list with the add button; also suppose to move whatever items we added to the right list back to the left list with the remove button. My code adds the item from left list to right list but it does not hold the item added. The next item I try to add just replaces the old item. Can anyone help me out please? Below is the entire code.

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;

public class Window {

    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Window window = new Window();
                    window.frame.setVisible(true);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Window() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        initialize();
    }

    public void initialize() {
        //Creating the Panel for Menu Bar       
        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 434, 23);
        frame.getContentPane().add(panel);
        panel.setLayout(new BorderLayout(0, 0));
        //Creating the Menu File Bar
        JMenuBar bar = new JMenuBar();
        panel.add(bar, BorderLayout.NORTH);
        JMenu file = new JMenu("File");
        JMenuItem load = new JMenuItem("Load");
        JMenuItem save = new JMenuItem("Save");
        JMenuItem exit = new JMenuItem("Exit");
        file.add(load);
        file.add(save);
        file.add(exit);
        bar.add(file);

        //Populate Left List with part names    
        final DefaultListModel parts = new DefaultListModel();
        parts.addElement("Case");
        parts.addElement("Motherboard");
        parts.addElement("CPU");
        parts.addElement("GPU");
        parts.addElement("PSU");
        parts.addElement("RAM");
        parts.addElement("HDD");

        final JList leftList = new JList(parts);
        leftList.setBounds(10, 26, 142, 224);
        frame.getContentPane().add(leftList);

        //create right list 
        final DefaultListModel partSelected = new DefaultListModel();
        final JList rightList = new JList();
        rightList.setBounds(282, 26, 142, 224);
        frame.getContentPane().add(rightList);

        //add event to the button to move items from left list to right list
        JButton btnNewButton = new JButton(">>");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                rightList.setListData(leftList.getSelectedValues());
                for (Object selectedValue : leftList.getSelectedValuesList()) {
                    partSelected.addElement(selectedValue);
                    parts.removeElement(selectedValue);
                    int iSelected = leftList.getSelectedIndex();
                    if (iSelected == -1) {
                        return;
                    }
                }
            }
        });
        btnNewButton.setBounds(172, 86, 89, 23);
        frame.getContentPane().add(btnNewButton);

        //Remove Button     
        JButton remove = new JButton("<<");
        remove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                rightList.setListData(leftList.getSelectedValues());
                for (Object selectedValue : rightList.getSelectedValuesList()) {
                    parts.addElement(selectedValue);
                    int selected = rightList.getSelectedIndex();
                    if (selected == -1) {
                        return;
                    }
                    partSelected.removeElement(selectedValue);
                }
            }
        });
        remove.setBounds(172, 140, 89, 23);
        frame.getContentPane().add(remove);
    }
}

@Prob1em I've updated your code.

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class Window {

    private final JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            Window window = new Window();
            window.frame.setVisible(true);

        });
    }

    public Window() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        initialize();
    }

    public void initialize() {
        //Creating the Panel for Menu Bar       
        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 434, 23);
        frame.getContentPane().add(panel);
        panel.setLayout(new BorderLayout(0, 0));
        //Creating the Menu File Bar
        JMenuBar bar = new JMenuBar();
        panel.add(bar, BorderLayout.NORTH);
        JMenu file = new JMenu("File");
        JMenuItem load = new JMenuItem("Load");
        JMenuItem save = new JMenuItem("Save");
        JMenuItem exit = new JMenuItem("Exit");
        file.add(load);
        file.add(save);
        file.add(exit);
        bar.add(file);

        //Populate Left List with part names    
        final DefaultListModel parts = new DefaultListModel();
        parts.addElement("Case");
        parts.addElement("Motherboard");
        parts.addElement("CPU");
        parts.addElement("GPU");
        parts.addElement("PSU");
        parts.addElement("RAM");
        parts.addElement("HDD");

        final JList leftList = new JList(parts);
        leftList.setBounds(10, 26, 142, 224);
        frame.getContentPane().add(leftList);

        //create right list 
        final DefaultListModel partSelected = new DefaultListModel();
        final JList rightList = new JList(partSelected);
        rightList.setBounds(282, 26, 142, 224);
        frame.getContentPane().add(rightList);

        //add event to the button to move items from left list to right list
        JButton btnNewButton = new JButton(">>");
        btnNewButton.addActionListener((ActionEvent arg0) -> {
//            rightList.setListData((Vector) leftList.getSelectedValue());
            for (Object selectedValue : leftList.getSelectedValuesList()) {
                partSelected.addElement(selectedValue);
                parts.removeElement(selectedValue);
                int iSelected = leftList.getSelectedIndex();
                if (iSelected == -1) {
                    return;
                }
            }
        });
        btnNewButton.setBounds(172, 86, 89, 23);
        frame.getContentPane().add(btnNewButton);

        //Remove Button     
        JButton remove = new JButton("<<");
        remove.addActionListener((ActionEvent arg0) -> {
//            rightList.setListData(leftList.getSelectedValues());
            for (Object selectedValue : rightList.getSelectedValuesList()) {
                parts.addElement(selectedValue);
                partSelected.removeElement(selectedValue);
                int selected = rightList.getSelectedIndex();
                if (selected == -1) {
                    return;
                }
            }
        });
        remove.setBounds(172, 140, 89, 23);
        frame.getContentPane().add(remove);
    }
}

btw why did you write rightList.setListData(leftList.getSelectedValues()) and its also a deprecated method in Java 8 please follow proper naming conventions while declaring variables though I haven't changed them in this code, the event handling functions are as per Java 8 lambda expression ,
Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM