Moinz.
Ich bastel mir gerade n kleines Programm zusammen, mit dem ich Daten von einer JList in eine andere kopieren und/oder per Drag n Drop bewegen kann.
Das läuft recht gut aber ich hab 2 grosse Probleme.
Beim Button "Alles kopieren" wird ein DefaultListModel in eine andere Klasse übergeben und diese kommt da auch an und kann problemlos S.o.p. werden. Allerdings weiß ich -noch- nicht, wie ich sie dann in eine bestehene JList bringe und die Ansicht aktualisiere?
Das andere Problem ist der DnD. In der einen Klasse konnte ich die Inhalte auf Dragable(true) stellen...aber das ablegen läuft nich so richtig. Hat jemand n Hint für mich?
-bedank-
TZP
Hier die MainClass...kein grosses Ding
Die Klasse, wo der Inhalt herkommt
Und wo es rein soll.
Ich bastel mir gerade n kleines Programm zusammen, mit dem ich Daten von einer JList in eine andere kopieren und/oder per Drag n Drop bewegen kann.
Das läuft recht gut aber ich hab 2 grosse Probleme.
Beim Button "Alles kopieren" wird ein DefaultListModel in eine andere Klasse übergeben und diese kommt da auch an und kann problemlos S.o.p. werden. Allerdings weiß ich -noch- nicht, wie ich sie dann in eine bestehene JList bringe und die Ansicht aktualisiere?
Das andere Problem ist der DnD. In der einen Klasse konnte ich die Inhalte auf Dragable(true) stellen...aber das ablegen läuft nich so richtig. Hat jemand n Hint für mich?
-bedank-
TZP
Hier die MainClass...kein grosses Ding
Code:
public class MainClass {
public MainClass(){
}
public static void main(String[] args) {
Testdateien td = new Testdateien();
AllIn allIn = new AllIn();
JFrame meinFrame = new JFrame("Testumgebung");
Container meinConti = meinFrame.getContentPane();
meinConti.setLayout(new GridBagLayout());
meinConti.add(td);
meinConti.add(allIn);
meinFrame.setSize(800, 600);
meinFrame.setVisible(true);
meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Die Klasse, wo der Inhalt herkommt
Code:
public class Testdateien extends JPanel{
private AllIn allIn;
private DefaultListModel dfl;
private DefaultListModel saveDLF;
private JList alleDateien;
private JScrollPane meinScrollPane;
private File pfad;
private File[] alleFilez;
private JButton alleKopieren;
public Testdateien(){
allIn = new AllIn();
dfl = new DefaultListModel();
saveDLF = new DefaultListModel();
alleKopieren = new JButton("Alles Kopieren =>");
//get content
pfad = new File("D:/Test");
alleFilez = pfad.listFiles();
for(File f : alleFilez){
//files only please
if(f.isFile())dfl.addElement(f.getName() + " \n");
}
alleDateien = new JList(dfl);
alleDateien.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
alleDateien.setDropMode(DropMode.ON);
alleDateien.setDragEnabled(true);
meinScrollPane = new JScrollPane(alleDateien);
//Button Listener
alleKopieren.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
allesKopieren(e);
}
});
meinScrollPane.setPreferredSize(new Dimension(200, 200));
meinScrollPane.setColumnHeaderView(new JLabel(dfl.getSize() + " Dateien"));
// setLayout(new GridBagLayout());
add(meinScrollPane);
add(alleKopieren);
}
//Button-event
public void allesKopieren(ActionEvent e){
saveDLF.clear();
//copy list by hand
for(int i = 0; i < dfl.getSize(); i++){
saveDLF.addElement(dfl.getElementAt(i));
}
// deletes the list at the second time?!?
// saveDLF = dfl.;
allIn.listeFuellen(saveDLF);
}
}
Und wo es rein soll.
Code:
public class AllIn extends JPanel implements DropTargetListener{
private JScrollPane inAll;
private JScrollPane inDoku;
private DefaultListModel dlfIn;
private DefaultListModel dlfDoku;
private JList inList;
private JList inListDoku;
private String targetDir;
private File rein;
public AllIn(){
targetDir = "D:/Test/in/";
rein = new File(targetDir);
dlfIn = new DefaultListModel();
dlfDoku = new DefaultListModel();
inList = new JList(dlfIn);
inAll = new JScrollPane(inList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
inAll.setColumnHeaderView(new JLabel("Alle Testdateien In"));
inAll.setPreferredSize(new Dimension(200, 200));
inListDoku = new JList(dlfDoku);
inDoku = new JScrollPane(inListDoku, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
inDoku.setPreferredSize(new Dimension(200, 200));
// inDoku.setCorner(JScrollPane.UPPER_RIGHT_CORNER, new JLabel("2", JLabel.CENTER));
inDoku.setColumnHeaderView(new JLabel("Dokumentation In"));
inListDoku.setDropMode(DropMode.INSERT);
DropTarget dt = new DropTarget(inListDoku, this);
add(inAll);
add(inDoku);
}
//Problem eins: Wie updatet man die Ansicht richtig?
public void listeFuellen(DefaultListModel meinDLF){
dlfIn.clear();
// dlfIn = meinDLF;
for(int i = 0; i< meinDLF.getSize(); i++){
dlfIn.addElement(meinDLF.getElementAt(i));
}
inList = new JList(dlfIn);
inList.updateUI();
}
public void dragEnter(DropTargetDragEvent arg0) {
}
public void dragExit(DropTargetEvent arg0) {
}
public void dragOver(DropTargetDragEvent arg0) {
}
// Problem zwei: Ein gutes Beispiel wäre nice. Bin -noch- zu doof dafür. ^^
public void drop(DropTargetDropEvent e) {
}
public void dropActionChanged(DropTargetDragEvent arg0) {
}
}