Java 具有相同型号的一对jlists(如何从其中一个中删除所选的另一个)

Java 具有相同型号的一对jlists(如何从其中一个中删除所选的另一个),java,jlist,mouselistener,Java,Jlist,Mouselistener,我有一个带有一些字符串值的模型。这个模型,我将它应用于两个jlist。我需要每次单击其中一个jlist时都列出一个值,该值与另一个jlist不相似。如果发生在另一个jlist,则相同,但首先必须将值更新为模型包含的值。我做了一些努力,但用我的代码,当我点击一个值时,它在两个列表中都消失了! 我做错了什么? 代码如下: /* * To change this template, choose Tools | Templates * and open the template in the e

我有一个带有一些字符串值的模型。这个模型,我将它应用于两个jlist。我需要每次单击其中一个jlist时都列出一个值,该值与另一个jlist不相似。如果发生在另一个jlist,则相同,但首先必须将值更新为模型包含的值。我做了一些努力,但用我的代码,当我点击一个值时,它在两个列表中都消失了! 我做错了什么? 代码如下:

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

package accessfiletest;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;


/**
 *
* @author 
*/

 @SuppressWarnings("serial")
public class MoveFolders extends JFrame  
{
//start of class MoveFolders 
//start of variables
private DefaultListModel<String> theModel;
private DefaultListModel<String> fromModel;
private DefaultListModel<String> toModel;
private JList<String> fromJList;
private JList<String> toList;
private JButton moveButton;
private JPanel theJPanel;
//end of variables
public MoveFolders( DefaultListModel<String> model1)
{
 super("Μετακίνηση Εγγράφων από Φάκελο σε Φάκελο");
 fromModel=model1;
 toModel=model1;
 theModel=model1;
 theJPanel=new JPanel(null);
 fromJList=new JList<>(fromModel);
 fromJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 fromJList.setSelectedIndex(0);
 fromJList.addMouseListener(fromlistener);

JScrollPane frompane=new  JScrollPane(fromJList);
frompane.setBounds(50, 50, 200, 150);
theJPanel.add(frompane);
moveButton=new JButton("ΜΕΤΑΚΙΝΗΣΗ >>");
moveButton.setBounds(260, 90, 150, 20);
theJPanel.add(moveButton);
toList=new JList<>(toModel);
 if (model1.getSize()>1)
   {
    toList.setSelectedIndex(1);

   }
else
   {
    JOptionPane.showMessageDialog(null,
"Πρέπει να έχετε πάνω από 1 φάκελο για να γίνει αντιγραφή εγγράφων.\nΤο παράθυρο θα       κλείσει.", "Λάθος", JOptionPane.ERROR_MESSAGE);
 dispose();
   }
 toList.addMouseListener(toListener);
 toList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 JScrollPane topane=new  JScrollPane(toList);
 topane.setBounds(420, 50, 200, 150);
 theJPanel.add(topane);

 add(theJPanel);
 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 setSize(670, 300);
 setVisible(true);
 }

 MouseListener fromlistener = new MouseAdapter() {
 public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 1) {
        final int index = fromJList.locationToIndex(e.getPoint());
       SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                   toModel=theModel;
                   toModel.remove(index);
                }
            });
        }
   }
};

MouseListener toListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 1) {
        final int index = fromJList.locationToIndex(e.getPoint());
        SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    fromModel=theModel;
                    fromModel.remove(index);
                }
            });
     }
   }

  };

}//end of class MoveFolders 
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
包访问文件测试;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入javax.swing.*;
/**
*
*@作者
*/
@抑制警告(“串行”)
公共类MoveFolders扩展了JFrame
{
//类开始移动文件夹
//变量的开始
私有默认列表模型;
private DefaultListModel fromModel;
私有模型;
私有JList fromJList;
私人收费表;
私有JButton移动按钮;
私人JPanel theJPanel;
//变量结束
公用文件夹(DefaultListModel1)
{
super(“ετακεησηεγρρφωναπόΦεκελοσεΦκελο”);
fromModel=model1;
toModel=model1;
模型=模型1;
theJPanel=新的JPanel(null);
fromJList=新JList(fromModel);
fromJList.setSelectionMode(ListSelectionModel.SINGLE_选择);
fromJList.setSelectedIndex(0);
fromJList.addMouseListener(fromlistener);
JScrollPane frompane=新的JScrollPane(fromJList);
frompane.setBounds(50,50,200,150);
jpanel.add(frompane);
moveButton=新的按钮(“ΜΕΑΚΝ∑∑∑>”;
移动按钮.立根(260,90,150,20);
添加(移动按钮);
toList=新JList(toModel);
如果(model1.getSize()>1)
{
toList.setSelectedIndex(1);
}
其他的
{
JOptionPane.showMessageDialog(null,
“πρέπειναέχετεπάνωαπό1φάκεεαγίνεειετρεεπωεπρθθρθθθθθθθθθακλεσεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεε;
处置();
}
toList.addMouseListener(toListener);
toList.setSelectionMode(ListSelectionModel.SINGLE_选择);
JScrollPane-topane=新的JScrollPane(toList);
立根(420,50,200,150);
添加(托潘);
添加(theJPanel);
setDefaultCloseOperation(在关闭时处理);
设置大小(670300);
setVisible(真);
}
MouseListener fromlistener=new MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
如果(如getClickCount()==1){
最终int索引=fromJList.locationToIndex(e.getPoint());
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
toModel=模型;
删除(索引);
}
});
}
}
};
MouseListener toListener=新的MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
如果(如getClickCount()==1){
最终int索引=fromJList.locationToIndex(e.getPoint());
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
fromModel=模型;
fromModel.remove(索引);
}
});
}
}
};
}//类结束移动文件夹

您使用了两次相同的型号,但实际上它们是不同的。如果本质不同,则使用不同的模型。如果修改不同视图(JList)使用的模型,它们都会反映基础模型上的更改,这很正常。

您使用了两次相同的模型,但实际上它们是不同的。如果本质不同,则使用不同的模型。如果修改不同视图(JList)使用的模型,它们都会反映基础模型上的更改,这是很正常的。每个列表都需要使用其自己的
列表模型的引用

    public MoveFolders(DefaultListModel<String> model1) {
        ...
        fromModel = new DefaultListModel<>();
        for (Object obj : model1.toArray()) {
            fromModel.addElement((String) obj);
        }
        toModel = new DefaultListModel<>();
        theModel = model1;
        ...
    }
用于将元素从模型移动到模型

    MouseListener fromlistener = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 1) {
                final int index = fromJList.locationToIndex(e.getPoint());
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        int index = fromJList.getSelectedIndex();
                        toModel.addElement(fromModel.getElementAt(index));
                        fromModel.remove(index);
                    }
                });
            }
        }
    };
    MouseListener toListener = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 1) {
                final int index = fromJList.locationToIndex(e.getPoint());
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        int index = toList.getSelectedIndex();
                        fromModel.addElement(toModel.getElementAt(index));
                        toModel.remove(index);
                    }
                });
            }
        }

    };


}

我希望这能帮助您

每个列表都需要使用自己的
列表模型的参考

    public MoveFolders(DefaultListModel<String> model1) {
        ...
        fromModel = new DefaultListModel<>();
        for (Object obj : model1.toArray()) {
            fromModel.addElement((String) obj);
        }
        toModel = new DefaultListModel<>();
        theModel = model1;
        ...
    }
用于将元素从模型移动到模型

    MouseListener fromlistener = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 1) {
                final int index = fromJList.locationToIndex(e.getPoint());
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        int index = fromJList.getSelectedIndex();
                        toModel.addElement(fromModel.getElementAt(index));
                        fromModel.remove(index);
                    }
                });
            }
        }
    };
    MouseListener toListener = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 1) {
                final int index = fromJList.locationToIndex(e.getPoint());
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        int index = toList.getSelectedIndex();
                        fromModel.addElement(toModel.getElementAt(index));
                        toModel.remove(index);
                    }
                });
            }
        }

    };


}

我希望这能对您有所帮助

我需要两种型号都相同。但实际上我在这里使用了两个不同的字段,它们的值是相同的。是不是?不,你们有不同的字段,它们都引用相同的模型。所以你们说toModel和fromModel是相同的?所以当我从一个不相似的值中移除另一个值时?@Vagelism准确地说。您可以做的是将字符串列表传递给构造函数,然后实例化2个不同的DefaultListModel,并添加同一列表中的所有元素。有没有办法从模型中获取列表,然后执行上面提到的技巧?我不知道是否有一种方法可以将模型的值传递给列表。我需要两个模型都相同。但实际上我在这里使用了两个不同的字段,它们的值是相同的。是不是?不,你们有不同的字段,它们都引用相同的模型。所以你们说toModel和fromModel是相同的?所以当我从一个不相似的值中移除另一个值时?@Vagelism准确地说。您可以做的是将字符串列表传递给构造函数,然后实例化2个不同的DefaultListModel,并添加同一列表中的所有元素。有没有办法从模型中获取列表,然后执行上面提到的技巧?我不知道是否有一种方法可以将模型的值传递给列表。谢谢你的努力。但我是新的java用户,我不喜欢复制粘贴一些我不完全理解的代码。有没有办法根据我的思维方式对我的代码稍作修改?谢谢你的努力。但我是新的java用户,我不喜欢复制粘贴一些我不完全理解的代码。有没有办法根据我的思维方式对代码进行一些小的修改