在2个JLists之间复制项目

时间:2014-04-18 16:12:43

标签: java swing jlist

在这个程序中,我想将List1中的项目随机复制到List2,反之亦然。然而 而不是选择元素,它将不同的元素移动到相对的JList。最初,当我从list1复制到list2时,它运行良好。但是,当我再次从List2复制到List1时,它无法正常工作。有人可以帮我理解这里有什么问题吗?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyFrame extends JFrame{

    private JLabel lTitle;
    private JList list1;
    private JButton btAdd1;
    private JButton btAdd2;
    private JPanel buttonpane;
    private JList list2;
    private JPanel titlePane;
    private JPanel listPane;
    private DefaultListModel dlm2;
    private String data1[];
    private String data2[];
    private DefaultListModel dlm1;

    MyFrame(){
        setSize(200,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        lTitle=new JLabel("Subject List");
        lTitle.setFont(new Font("",1,30));

        data1=new String[]{"A1","A2","A3","A4","A5"};
        data2=new String[]{"B1","B2","B3","B4","B5"};

         dlm1=new DefaultListModel();
         list1=new JList(dlm1);
          dlm2=new DefaultListModel();
         list2=new JList(dlm2);

        for(int i=0;i<data1.length;i++){
            dlm1.add(i,data1[i]);
        }   

        for(int i=0;i<data2.length;i++){
            dlm2.add(i,data2[i]);
        }   

        btAdd1=new JButton(">>");
        btAdd1.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                int x[]=list1.getSelectedIndices();
                for(int i=0;i<x.length;i++){
                    dlm2.add(i,data1[x[i]]);
                }
            }       
        });

        btAdd2=new JButton("<<");
        btAdd2.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                int x[]=list2.getSelectedIndices();
                for(int i=0;i<x.length;i++){
                    dlm1.add(i,data2[x[i]]);
                }
            }       
        });

        buttonpane=new JPanel(new GridLayout(2,1,10,10));
        buttonpane.add(btAdd1);
        buttonpane.add(btAdd2);
        titlePane=new JPanel( );
        titlePane.add(lTitle);
        listPane=new JPanel();
        listPane.add(list1);
        listPane.add(buttonpane);
        listPane.add(list2);

        add("North",titlePane);
        add("Center",listPane);

    }
}

class Demo{
    public static void main(String args[]){
        new MyFrame().setVisible(true);     
    }
}

1 个答案:

答案 0 :(得分:2)

这是因为您尝试从字符串的原始data1和data2数组中获取要复制的值,但是在复制新值时这些数组不会更新,因此您不能再使用它们(如果要保留它们)这个设计)。

相反,您可以通过DefaultListModel对象访问数据:使用新复制的值更新它们。基本上你必须修改两个监听器,第一个按钮:

btAdd1.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        int x[]=list1.getSelectedIndices();
        for(int i=0;i<x.length;i++){
            dlm2.add(i,dlm1.get(x[i]));
        }
    }       
});

还有第二个按钮:

btAdd2.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        int x[]=list2.getSelectedIndices();
        for(int i=0;i<x.length;i++){
            dlm1.add(i,dlm2.get(x[i]));
        }
    }       
});

我希望这会对你有所帮助。

相关问题