Dateien aus Liste löschen

montii

Mitglied
Hallo,

ich hab mir eine Liste gebastelt, die mit hilfe des FileChoosers und einem Jpeg-Filter mit diversen Dateien gefüllt wird. Nun will ich aber besagte Dateien aus der Liste, mittels klicken auf einen Button, löschen. Ich weiß das es irgend wie mit remove gehen muß, aber das funktioniert nicht so richtig. Da löscht sich bei mir nur die gesamte Liste. Irgend wie bekomme ich den ItemListener und den ActionListener nicht unter einen Hut. Wer kann mir helfen???
 

Thomas Darimont

Erfahrenes Mitglied
Servus!

Schau dir das hier mal an:
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class ListTest extends JFrame{

	
	Vector v = null;
	JList jl = null;
	JButton jbtn  = null;
	JPanel jp = null;
	
	public ListTest(){
	super("ListTest");
	setSize(320,240);
	v = new Vector();
	v.add("ListItem0");
	v.add("ListItem1");
	v.add("ListItem2");
	jp = new JPanel();
	jl = new JList(v);
	jbtn = new JButton("Remove");
	jbtn.addMouseListener(new MousePressedAdapter());
	
	jp.add(jbtn);
	jp.add(jl);
	getContentPane().add(jp);
	//pack();
	show();
	
	}
	
	public static void main(String args[]){
		new ListTest();
	}
	
	class MousePressedAdapter extends MouseAdapter{
	
		public void mousePressed(MouseEvent evt){
			Object src = null;
			if((src = evt.getSource()) instanceof JButton){
				if (!v.isEmpty()){
				v.remove(jl.getSelectedIndex());
				jl.updateUI();
				 for(int i = 0; i < jl.getModel().getSize(); i++) {
				 	System.out.println(jl.getModel().getElementAt(i));
				 }

				System.out.println("index gelöscht");
				}else{
					System.out.println("Liste ist leer!");	
				}
				
			}
		}
	
	}

}

Gruss Tom
 

montii

Mitglied
Danke, Tom, dass du mir so schnell geantwortest hast. Aber irgend wie bekomme ich das nicht so richtig hin. Bei mir löscht es immer gleich die ganze Liste! Die schwierigkeit ist bei mir, die Variable, die ich im ItemListener mit getSelectedItem oder getSelectedIndex bekomme, an den ActionListener zu übergeben, um die Datei bei "Buttonklick" zu löschen.
eine weitere Schwierigkeit ist es mehre dateien gleichzeitig zu löschen. dafür müßte ich ja ein arrey anlegen, da hörts bei mir auf.

kann mir jemand helfen? hab meinen quellcode mal mitgeschickt, kann verändert werden!
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class Choos extends Frame {
	
	JpgFilter jpgFilter;
	JLabel preview = new JLabel();	
	
	private int nCurrentY = 10;
	List l = new List();
	
	public Choos() {
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
			    dispose();
	    		System.exit(0);	
			}
		});
		
       l.addItemListener(new SelectListener(l, preview));
	     
	    
		setLayout(null);
		Button bl=new Button();
		bl.setSize(100,20);
		bl.setLocation(200,300);
		bl.setLabel("Choose");
		bl.addActionListener(new FileChooseListener(this));
	   	Button rm=new Button();
	   	rm.setSize(100,20);
		rm.setLocation(80,300);
		rm.setLabel("Remove");
		rm.addActionListener(new RemoveListener(this));
	   	l.setBounds(10, 30, 100, 70);
		l.setMultipleMode(true);
		preview.setBounds(200, 30, 100, 70);
		add(l);
		add(preview);
		add(bl);
	    add(rm); 
	}
	
	private void addFileName(String sFileName)
	{
		l.add(sFileName);
		
	}
	
    public static File[] chooseFiles()
     {
     	JFileChooser chooser = new JFileChooser();
     	chooser.setMultiSelectionEnabled(true);
        JpgFilter jpgFilter = new JpgFilter();
        chooser.setFileFilter(jpgFilter);
        chooser.addChoosableFileFilter(jpgFilter);
        int returnVal = chooser.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) 
        {
		   return chooser.getSelectedFiles();
		   
        }
        return null;
  
      
  	}
  	 	
 	class SelectListener implements ItemListener
 	{
 		private List l1;
 		private JLabel ip;
 		public SelectListener(List l, JLabel ip)
 		{
 		   l1=l;
 		   this.ip = ip;
 	    }
 	    public void itemStateChanged(ItemEvent ie)
 	      {
 	      final String sFilename = l1.getSelectedItem();
 	      if (sFilename == null)
 	      	return;
 	      ImageIcon portrait = new ImageIcon(sFilename);
 	      if (portrait!=null)
 	      	ip.setIcon(portrait);
 	      
 	      }
 	
    }
 	
 	  
  	class FileChooseListener implements ActionListener
  	{
  		private Choos c;
  		public FileChooseListener(Choos c)
  		{
  			this.c = c;
  		}
  		
  		public void actionPerformed(ActionEvent e)
  		{
  			File[] files = Choos.chooseFiles();
  			if (files == null) return;
  			for (int i=0; i<files.length; ++i)
		    
		   {
		   		c.addFileName(files[i].getName());
		   }
  		   //System.out.println(i);
  		}
  	}
 	   
        class RemoveListener implements ActionListener 
  	{
  		private List l2;
  		private Choos rm;
  		public RemoveListener(Choos rm)
  		{
  					l2=l;
  					this.rm = rm;
  		}
  		
  		public void actionPerformed(ActionEvent e1)
  		{
  		   {
				rm.remove(l2.getSelectedIndex());
				
				 
  		  }
  		   System.out.println(rm);
  		}
  	}
 	
	public static void main(String args[]) {
		Choos mainFrame = new Choos();
		mainFrame.setSize(400, 400);
		mainFrame.setTitle("Choose");
		mainFrame.setVisible(true);
		mainFrame.show();
		
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Thomas Darimont

Erfahrenes Mitglied
Servus!

Kann dein Beispiel leider nicht genau nachvollziehen, da du den Aufbau der Klasse JpgFilter nicht mitangegeben hast ... poste doch mal noch den Code dazu und dann sehen wir weiter ...

eine weitere Schwierigkeit ist es mehre dateien gleichzeitig zu löschen. dafür müßte ich ja ein arrey anlegen, da hörts bei mir auf.

... wie lange beschäftigst du dich denn schon mit Java?

Wenn ich dich verstanden habe, willst du Dateien die du im JFileChooser ausgewählt hast in einer Liste anzeigen ... dann willst du, wenn du ein Element dieser Liste anklickst dieses selektierte Element aus der Liste entfernen ... triffts das ungefähr?

Gruss Tom
 

montii

Mitglied
Eine Datei aus der Liste zu löschen habe ich jetzt hinbekommen, aber das ist ja bloß die Vor´stufe. Ich will ja mehrere selektierte Dateien aufeinmal löschen. mit JList hätte ich ne idee wie´s gehen könnte. aber ich hab ja keine JList sonder nur ne List. Ich hab den ganzen Tag daran gekrübelt, wie ich das mit nem Arrey hinbekommen könnte ... keine Ahnung. Für Vorschläge wäre ich dankbar.

by Micha
 

Neue Beiträge