In JList per Doppelklick eine Datei öffnen (z.B. ein PDF)

ZMarko

Mitglied
Hallo zusammen!

Ich habe mich gerade eben registriert. Hoffe ich mach alles richtig mit dem Thema öffnen.

Ich habe ne Frage. Ich mache ein Programm das Dateien auf dem PC sucht und die Dateinamen die das gesuchte Wort enthalten in einer JList anzeigt. Jetzt stehe ich aber auf der Leitung...... ich schaffe es mir die Dateinamen in der JList anzuzeigen, jetzt aber will ich wenn ich auf den Dateinamen mit einem Doppelklick drauf klicke das er mir die datei öffnet. Z. B. wenn ich auf ein PDF dokument doppelklicke er es als PDF mit Adobe öffnet oder wenn ich auf einen Film drücke er mir den Film mit Windowsmedia player öffnet!

Ich bin ein Java Anfänger..... Programmier mit Netbeans. Hoffe das mir jemand helfen kann.

Vielen Dank im Voraus!
 

ZMarko

Mitglied
Habe ich mir auch gedacht. Doch irgendwie versteh ich nicht wie das funktionieren soll weil es keinen Pfad gibt, oder wird der Pfad mitgespeichert?

Ich Frage mich auch wie ich jedes einzelne Element (bzw. Dateiname) ansprechen soll. ich mein damit wenn ich auf die erste zeile doppelklicke soll er mir das öffnen und wenn ich in die 4 zeile drücke soll er mir die 4 datei öffnen.
 

XHelp

Top Contributor
Öhm... was zeigst du da dann überhaupt an?
Ich würde, glaube ich, in das List-Model direkt File-Objekte reinpacken, dann hast du auch mehr Möglichkeiten damit irgendwas anzufangen (Icons beim Renderer, direkt File-Objekt bei den Select-Listener etc).
 

ZMarko

Mitglied
ich weiss nicht ob dieser Teil des Codes etwas hilft:
Java:
 for (File aktFile : files) {
                    if (aktFile.getName().contains(suchDateiMuster)) {
                       
                        foundFile = aktFile;
                        gefundeneDateien.add(foundFile);
                        model.addElement(foundFile.getName());
                        
                    }
                   
                }

ich füge zum DefaultListModel die namen der Files hinzu und lasse das ListModel anzeigen. da ich wircklich ein Java Anfänger bin weiss ich leider nicht was du mit "Icons beim Renderer, direkt File-Objekt bei den Select-Listener etc" meinst. :( könntst du mir bitte das etwas näher erklären? ich wäre sehr dankbar!
 

XHelp

Top Contributor
Ich dachte da eher an:
Java:
public class SimpleFileList extends JList {
	public SimpleFileList() {
		setModel(generateDemoModel());
		setCellRenderer(new DefaultListCellRenderer() {

			@Override
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				if (value instanceof File) {
					File file = (File) value;
					JLabel label = new JLabel(file.getName());
					label.setOpaque(true);
					label.setToolTipText(file.getAbsolutePath());
					FileSystemView view = FileSystemView.getFileSystemView();
					label.setIcon(view.getSystemIcon(file));
					if (isSelected || cellHasFocus) {
						label.setBackground(Color.LIGHT_GRAY);
					} else {
						label.setBackground(Color.WHITE);
					}
					return label;
				}
				return super.getListCellRendererComponent(list, value, index,
						isSelected, cellHasFocus);
			}
		});

		addListSelectionListener(new ListSelectionListener() {

			@Override
			public void valueChanged(ListSelectionEvent e) {
				JList list = (JList) e.getSource();
				File f = (File) list.getSelectedValue();
				try {
					Desktop.getDesktop().open(f);
				} catch (IOException e1) {
					e1.printStackTrace();
				}

			}
		});
	}

	private DefaultListModel generateDemoModel() {
		DefaultListModel model = new DefaultListModel();
		File f = new File(System.getProperty("user.home"));
		File[] list = f.listFiles();
		for (File currentFile : list) {
			model.addElement(currentFile);
			System.out.println(currentFile);
		}
		return model;
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame("FileList Demo");
		frame.setSize(300, 200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new JScrollPane(new SimpleFileList()));
		frame.setVisible(true);
	}
}

Da siehst du, warum es praktisch ist direkt File-Objekte in das Model zu packen.
(Das ganze ist aber eher als Demo gedacht)
 

ZMarko

Mitglied
Ähmmm!!!! Wow....

Das wird mir bestimmt weiter helfen. Hast recht das wäre schon klüger. Ich werde mir den Code anschauen aber so auf den ersten Blick find ich es super.

Sehr vielen Dank für die Hilfe! Wenn ich noch fragen habe darf ich mich noch mal melden?
 

ZMarko

Mitglied
irgendwie verstehe ich den Renderer nicht..... das ist mit so ohne erklärung etwas zu viel code auf einmal! Wie schon am Anfang gesagt bin ich ein Java-Neuling :( schaffe es irgendwie nicht so recht es in mein bestehendes Programm einzufügen :(

???:L
 

XHelp

Top Contributor
Welche Stellen genau verstehst du nicht? Oder hast du generell ein Verständnisproblem mit den Renderer?
Und wenn du schon auf deinen Code verweist: wie sieht er überhaupt aus?
Fragen über Fragen :)
 

ZMarko

Mitglied
Also!!!! :D Als aller erstes Danke für deine schnelle Antwort!

Ich verstehe den Renderer generell nicht. ich hab irgendwie keine Ahnung was er machen soll.

Mein Code sieht so aus:
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package meinprogramm;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.event.ListDataListener;

/**
 *
 * @author Marko
 */
public class App extends JFrame {

    private JLabel eintL = new JLabel("Datei eintippen");
    private JTextField datnTF = new JTextField();
    private JButton suchB = new JButton("Suchen...");
    private JButton oeffB = new JButton("Öffnen...");
    private JTextField treeFrame = new JTextField();
    private JTextField datFrame = new JTextField();
    private JButton bildB = new JButton("Bilder");
    private JButton dokB = new JButton("Dokumente");
    private JTextArea datTA= new JTextArea();
    private JList gefDatListe= new JList();
    private ArrayList<File> gefundeneDateien= new ArrayList<File>();
    DefaultListModel model= new DefaultListModel();
    
    public App() {
        initComponents();
      
    }

    private void initComponents() {
        
//        GefDatListModel gdlm = new GefDatListModel();
        
        

        
        Container c = getContentPane();
        c.setLayout(new GridLayout(0, 2));
        JPanel p1 = new JPanel(new GridLayout(2, 0));
        JPanel p2 = new JPanel(new GridLayout(0, 1));
        JPanel p3 = new JPanel(new GridLayout(3, 0));
        JPanel p4 = new JPanel(new GridLayout(0, 3));
        JScrollPane sp2= new JScrollPane(gefDatListe);
        

//        JScrollPane sp1= new JScrollPane(datTA);
//        datTA.setEditable(false);
        
        p3.add(eintL);
        p3.add(datnTF);
        p3.add(p4);
        p4.add(bildB);
        p4.add(dokB);
        p4.add(suchB);
        p1.add(treeFrame);
        p2.add(sp2);


        c.add(p3);
        c.add(p1);
        c.add(p2);

        suchB.addActionListener(new SuchenFunktionsButton());
//        bildB.addActionListener(new BilderSuchFunktionsButton());
        
        
    }

    public static void main(String[] sda) {
        App ap = new App();
        ap.setVisible(true);
        ap.setSize(600, 600);


    }

    public class SuchenFunktionsButton implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String s1 = datnTF.getText();
            
            model.removeAllElements();
            gefundeneDateien.removeAll(gefundeneDateien);
            
            SuchenFunktionsButton sfb = new SuchenFunktionsButton();
            String filenamepattern = s1;
            sfb.sucheDatei(new File("C:\\Program Files\\NetBeans 7.0"), filenamepattern);
            System.out.println("Fertig");
            
            System.out.println(gefundeneDateien.size());
            
            
            
           
            
//            gefDatListe.setModel(gefDatListe.getModel());
//            gefDatListe.paintComponents(getGraphics());
            
            
        }

        private void sucheDatei(File ausgangspunkt, String suchDateiMuster) {
            //File ausgangspunkt = new File("C:\\");
            //ausgangspunkt.list();
            File foundFile = null;
//        File[] files1= ausgangspunkt.list()
            System.out.println("Ausgangspunkt: [" + ausgangspunkt.getAbsolutePath() + "]");
            File[] files = ausgangspunkt.listFiles(new RealFileFilter());
            
            if (files != null) {
                
                for (File aktFile : files) {
                    if (aktFile.getName().contains(suchDateiMuster)) {
                       
                        foundFile = aktFile;
                        gefundeneDateien.add(foundFile);
                        model.addElement(foundFile.getName());
                        
                    }
                   
                }
            }
            if (true) {
                File[] dirlist = ausgangspunkt.listFiles(new DirFilter());
                if (dirlist != null) {
                    for (File aktDir : dirlist) {

                       sucheDatei(aktDir, suchDateiMuster);
                        
                    }
                }
            }
           gefDatListe.setModel(model);
        }

        public class RealFileFilter implements FileFilter {

            @Override
            public boolean accept(File datei) {
                boolean ok = false;
                return datei.isFile();

            }
        }

        public class DirFilter implements FileFilter {

            @Override
            public boolean accept(File datei) {
                boolean ok = false;
                return datei.isDirectory();

            }
        }
    }
    
    
//    private class GefDatListModel implements ListModel{
//
//        @Override
//        public int getSize() {
//            //throw new UnsupportedOperationException("Not supported yet.");
//            return gefundeneDateien.size();
//        }
//
//        @Override
//        public Object getElementAt(int index) {
//            //throw new UnsupportedOperationException("Not supported yet.");
//            return gefundeneDateien.get(index);
//        }
//
//        @Override
//        public void addListDataListener(ListDataListener l) {
//            //throw new UnsupportedOperationException("Not supported yet.");
//            
//        }
//
//        @Override
//        public void removeListDataListener(ListDataListener l) {
//            //throw new UnsupportedOperationException("Not supported yet.");
//        }
//        
//    }
    
}

einige sachen sind rauskommentiert weil ich "experimentiert" habe :D!!!

ich hoffe jetzt ist einiges klarer und das du mir helfen kannst!
 

XHelp

Top Contributor
In der Liste kannst du alles mögliche reinpacken. Auch Instanzen deiner eigenen Klassen. Diese Liste muss ja wissen, wie sie diese Objekte darstellen soll. Da kommen der Renderer ins Spiel. Er macht aus einem Objekte in der Liste eine Komponente, die für die Darstellung benutzt wird. Genaue und besser wird es wohl in fast jeden Buch erklärt. Da kannst du z.B. auch in der Insel nachschagen.

Nun zu deinem Code: du packst immer noch Dateinamen in die Liste und keine Dateien (Zeile 128). Ändere das erstmal.
Dannach musst du deiner Liste den Renderer aus meinem Code übergeben. Am besten den in eine neue Klasse auslagern:
Code:
public class FileListRenderer extends DefaultListCellRenderer
und dann in deiner Klasse
Code:
gefDatListe.setCellRenderer(new FileListRenderer())
an passender Stelle aufrufen.
 

ZMarko

Mitglied
ich hab das jetzt dank deiner Anweisung umsetzen können! :D

doch! jetzt öffnet er es mir immer doppelt???? warum? und ich weiss nicht wie ich das mit einem doppelklick machen kann. jetzt ist es so das ich darauf ein mal klicke und er es 2 mal öffnet??
ich würde aber das ich doppelklick mache und er es nur einmal öffnet!
 

ZMarko

Mitglied
Danke Danke Danke!!!!! ich hab es hinbekommen!!!!!

noch ne kurze frage! wenn ich will das er mir nicht nur die C-Platte durchsucht sondern auch die restlichen platten kann ich nur den Teil
Java:
sfb.sucheDatei(new File("C:\\"), filenamepattern);

ändern?

wie soll ich ihm das sagen?
 

XHelp

Top Contributor
Nein, das kannst du so nicht. Müsstest jedes Laufwerk/Pfad einzeln übergeben oder direkt
Code:
List<File>
entgegennehmen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
S Export aus JList Java Basics - Anfänger-Themen 6
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
I in listFiles() oder JList Dateiendungen entfernen Java Basics - Anfänger-Themen 14
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
B JFileChooser und JList Java Basics - Anfänger-Themen 7
OnDemand Enumeration <> JList Java Basics - Anfänger-Themen 5
P Mehrfachauswahl in einer JList Java Basics - Anfänger-Themen 2
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
C .txt und Jlist Java Basics - Anfänger-Themen 10
J Daten in eine JList einfügen Java Basics - Anfänger-Themen 6
A JList / toString modify Java Basics - Anfänger-Themen 2
K jlist an text anpassen Java Basics - Anfänger-Themen 3
D Erste Schritte JList + Checkbox Java Basics - Anfänger-Themen 5
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
A JList bearbeiten Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
H JList Java Basics - Anfänger-Themen 2
G JList Objekte richtig anzeigen in JDK 6 Java Basics - Anfänger-Themen 5
U JList Java Basics - Anfänger-Themen 6
L HashMap zu JList Java Basics - Anfänger-Themen 6
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
M Jlist Elemente hinzufügen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
P Jlist + Popupmenu Java Basics - Anfänger-Themen 10
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
c_sidi90 File Array an Jlist übergeben Java Basics - Anfänger-Themen 11
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
N DefaultListModel auf JList sortieren Java Basics - Anfänger-Themen 7
A JList mit Überschrift Java Basics - Anfänger-Themen 2
K Scrollbalken in JList funktioniert nicht Java Basics - Anfänger-Themen 9
B JList wird nicht aktualisiert bzw hat keine Items Java Basics - Anfänger-Themen 2
D JList nicht sichtbar Java Basics - Anfänger-Themen 4
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
K Datenbindung an JTable, JList, Primärschlüssel verstecken Java Basics - Anfänger-Themen 4
M JList Event Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
M ArrayList<int[]> - Problem mit JList! Java Basics - Anfänger-Themen 27
M JList + ListModel Java Basics - Anfänger-Themen 26
L JList Aktualisieren funktioniert nur Zufällig Java Basics - Anfänger-Themen 3
T JList aktualisieren Java Basics - Anfänger-Themen 12
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
R .Jpg anzeigen lassen nach klick in JList Java Basics - Anfänger-Themen 11
F Hilfe! JList Inhalte vertauschen Java Basics - Anfänger-Themen 2
A Eintrag einer JLIST speichern Java Basics - Anfänger-Themen 3
A Anordnung von JList Elementen Java Basics - Anfänger-Themen 3
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
B Einträge im JList einfügen Java Basics - Anfänger-Themen 9
S JList mit icons UND strings für Dialogbox Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
P JList in JPanel anzeigen Java Basics - Anfänger-Themen 2
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G Elemente aus jList entferne. Java Basics - Anfänger-Themen 2
G JList updaten Java Basics - Anfänger-Themen 7
K jList scrollPane Java Basics - Anfänger-Themen 2
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
K JList verschiebt sich Java Basics - Anfänger-Themen 7
G String in JList Java Basics - Anfänger-Themen 11
T Jlist Object hinzufügen Java Basics - Anfänger-Themen 2
B Auslesen der JList Java Basics - Anfänger-Themen 11
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
M Dateien in einem Ordner, JList Java Basics - Anfänger-Themen 7
G JList größe verändert sich Java Basics - Anfänger-Themen 2
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
C jList - Zeile Markieren - jList.setSelectedIndex(wert); Java Basics - Anfänger-Themen 3
G JList mit LinkedList füllen Java Basics - Anfänger-Themen 2
G JList Mehrfachselektion Java Basics - Anfänger-Themen 6
N 2 spaltige JList, mit dynamischen Inhalt Java Basics - Anfänger-Themen 4
P JList mit setListData(<Vector>) Java Basics - Anfänger-Themen 7
J GUI mit JList Java Basics - Anfänger-Themen 2
N drag and drop mit JList Java Basics - Anfänger-Themen 5
G 1. Buchstabe eines JList eintrages verschieden farbig machen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben