Java 使用AbstractListModel通过添加/删除按钮在2个JLList之间移动所选项目

Java 使用AbstractListModel通过添加/删除按钮在2个JLList之间移动所选项目,java,swing,jlist,Java,Swing,Jlist,我对编程一无所知。似乎我研究得越多,我就越迷惑自己,我不得不过度思考需要做什么。抽象列表模型是使Jlist正常工作所必需的。我需要知道什么是对的/错的。如果需要使用,我应该将getselectedvalues()放在哪里 JList Left_list = new JList(); Left_list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSe

我对编程一无所知。似乎我研究得越多,我就越迷惑自己,我不得不过度思考需要做什么。抽象列表模型是使
Jlist
正常工作所必需的。我需要知道什么是对的/错的。如果需要使用,我应该将
getselectedvalues()
放在哪里

JList Left_list = new JList();
    Left_list.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
        }
    });
    Left_list.setFont(new Font("Tahoma", Font.PLAIN, 14));
    Left_list.setModel(new AbstractListModel() {
        String[] values = new String[] {"Case", "Motherboard", "CPU", "RAM", "GPU", "HDD", "PSU"};
        public int getSize() {
            return values.length;
        }
        public Object getElementAt(int index) {
            return values[index];
        }
    });
    Left_list.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
    Left_list.setBounds(10, 11, 146, 218);
    frame.getContentPane().add(Left_list);

    JList Right_list = new JList();
    Right_list.setModel(new AbstractListModel() {
        String[] values = new String[] {};
        public int getSize() {
            return values.length;
        }
        public Object getElementAt(int index) {
            return values[index];
        }
    });
    Right_list.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
    Right_list.setBounds(278, 16, 146, 213);
    frame.getContentPane().add(Right_list);

    JButton btnNewButton = new JButton("Add>>");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    btnNewButton.setBounds(166, 91, 102, 23);
    frame.getContentPane().add(btnNewButton);

    JButton btnNewButton_1 = new JButton("<<Remove");
    btnNewButton_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    btnNewButton_1.setBounds(166, 125, 102, 23);
    frame.getContentPane().add(btnNewButton_1);
JList Left_list=new JList();
Left_list.addListSelectionListener(新建ListSelectionListener()){
public void值已更改(ListSelectionEvent e){
}
});
Left_list.setFont(新字体(“Tahoma”,Font.PLAIN,14));
Left_list.setModel(新的AbstractListModel(){
字符串[]值=新字符串[]{“机箱”、“主板”、“CPU”、“RAM”、“GPU”、“HDD”、“PSU”};
公共int getSize(){
返回值.length;
}
公共对象getElementAt(int索引){
返回值[索引];
}
});
Left_list.setOrder(新线条边框(新颜色(0,0,0,2,true));
左列表.立根(10,11,146,218);
frame.getContentPane().add(左列表);
JList Right_list=新建JList();
Right_list.setModel(新的AbstractListModel(){
字符串[]值=新字符串[]{};
公共int getSize(){
返回值.length;
}
公共对象getElementAt(int索引){
返回值[索引];
}
});
右列表。设置顺序(新线条边框(新颜色(0,0,0,2,true));
右图列表.立根(278,16,146,213);
frame.getContentPane().add(右列表);
JButton btnNewButton=新JButton(“添加>>”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
}
});
btnNewButton.setBounds(166,91,102,23);
frame.getContentPane().add(btnNewButton);

JButton btnNewButton_1=新的JButton(我建议使用
DefaultListModel
,因为它提供了变异
ListModel

DefaultListModel<String> model = new DefaultListModel<>();
for (String item : new String[] {"Case", "Motherboard", "CPU", "RAM", "GPU", "HDD", "PSU"}) {
    model.addElement(item);
}
JList<String> Left_list= new JList<>();
Left_list.setModel(model);
//...

JList<String> Right_list = new JList<>(new DefaultListModel<String>());
//...

btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        List<String> selected = Left_list.getSelectedValuesList();
        DefaultListModel<String> left = Left_list.getModel();
        DefaultListModel<String> right = Right_list.getModel();
        for (String item : selected) {
            left.removeElement(item);
            right.addElement(item);
        }
    }
});
//...
JButton btnNewButton_1 = new JButton("<<Remove");
btnNewButton_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        List<String> selected = Right_list.getSelectedValuesList();
        DefaultListModel<String> left = Left_list.getModel();
        DefaultListModel<String> right = Right_list.getModel();
        for (String item : selected) {
            right.removeElement(item);
            left.addElement(item);
        }
    }
});
DefaultListModel=newDefaultListModel();
对于(字符串项:新字符串[]{“机箱”、“主板”、“CPU”、“RAM”、“GPU”、“HDD”、“PSU”}){
型号.补遗(项);
}
JList Left_list=新JList();
左列表。设置模型(模型);
//...
JList Right_list=new JList(new DefaultListModel());
//...
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
选择列表=左列表。getSelectedValuesList();
DefaultListModel left=left_list.getModel();
DefaultListModel right=right_list.getModel();
用于(字符串项:选定){
左。拆卸(项目);
对。附录(项目);
}
}
});
//...

JButton btnNewButton_1=新JButton(“避免使用
null
layouts,像素完美的布局在现代ui设计中是一种错觉。有太多的因素会影响组件的单个大小,而这些因素都是您无法控制的。Swing的设计核心是与布局管理器配合使用,丢弃这些布局将导致无休止的问题和问题越来越多的时间试图纠正布局是否阻止我将选定的项目从一个列表转到另一个列表?不,但它会炸了你的脸,让你的生活痛苦。。。