2012-04-30 6 views
0

私はいくつかの文字列値を持つモデルを持っています。このモデルを2つのリストに適用します。私は1つのjlistから値をクリックするたびに、その値が他のjlistから消えていく必要があります。その後、他のjlistにも同じことが起こる場合は同じですが、最初にモデルに含まれている値に値を更新する必要があります。私はいくつかの努力をしましたが、私のコードでは1つの値をクリックすると両方のリストが消えます! 私は何が間違っていますか?ここ は、コードは次のとおりです。同じモデルのリストのペア(選択したモデルを削除する方法)

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

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

fromModelfromModel

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についてはtoModel

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

にこれはyを助けることができるou

+0

あなたのeffordをありがとう。しかし、私は新しいJavaユーザーであり、私は完全に理解していないいくつかのコードを貼り付けるだけで快適に感じることはありません。自分のやり方に基づいてマイナーチェンジしてコードを修正する方法はありますか? – Vagelism

+0

私はあなたのコードのために私の答えを変更しました。がんばろう! –

+0

ありがとうございました! – Vagelism

1

あなたは二度同じモデルを使用しているが、それらは実際に異なっています。それらが本質的に異なる場合は、異なるモデルを使用してください。異なるビュー(JList)で使用されるモデルを変更すると、両方ともそのモデルの変更が反映されるだけです。私はことを願って移動要素については各リストはListModelの独自の基準を使用する必要が

+0

私は両方のモデルが同じである必要があります。しかし、実際にはここでは同じ値で2つの異なる値を使用します。 – Vagelism

+0

いいえ、すべて同じモデルを参照するフィールドがあります。 –

+0

あなたはtoModelとfromModelが同じであると言っていますか?だから私は一つの消滅から一つの価値を他の消滅から取り除くのだろうか? – Vagelism

関連する問題