2012-04-30 22 views
0

我有一個字符串值的模型。這個模型,我將它應用到兩個jlists。我每次都需要從一個jlist點擊一個值,這個值會從另一個值中消失。然後,如果它發生在另一個jlist上,但首先必須將值更新爲模型包含的值。當我點擊一個值時,我做了一些努力,但是使用我的代碼,然後消失在兩個列表中! 我在做什麼錯? 下面是代碼:一對jlists與相同的模型(如何從其中一個選擇刪除)

/* 
* 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 

回答

2

每個列表需要使用它自己的ListModel參考,

public MoveFolders(DefaultListModel<String> model1) { 
     ... 
     fromModel = new DefaultListModel<>(); 
     for (Object obj : model1.toArray()) { 
      fromModel.addElement((String) obj); 
     } 
     toModel = new DefaultListModel<>(); 
     theModel = model1; 
     ... 
    } 

對於移動元素fromModeltoModel

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

對於移動元素toModelfromModel

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

    }; 


} 

我希望這可以幫助y ou

+0

謝謝你的支持。但我是新的Java用戶,我不舒服只是複製一些我不完全理解的代碼。有沒有什麼辦法可以根據我的工作方式稍微修改我的代碼? – Vagelism

+0

我改變了你的代碼的答案。祝你好運! –

+0

非常感謝! – Vagelism

1

您正在使用兩次相同的模型,但它們實際上是不同的。如果它們本質上不同,請使用不同的型號。如果修改不同視圖使用的模型(JList),它們都反映底層模型的變化,這只是正常的。

+0

我需要兩者都有相同的模型。但實際上在這裏我使用了2個不同的值,或者不是? – Vagelism

+0

不,你有不同的領域,所有參考相同的模型。 –

+0

所以你說,模型和fromModel是一樣的?所以當我從一箇中消除另一個的價值時呢? – Vagelism

相關問題