Hallo! Ist es möglich, eine String Liste in einem GUI ausgegeben, so mit ActionListenern zu versehen, dass man auf ein Element in der Liste klickt und sich dann der Ordner in dem sich das Element befindet geöffnet wird?
Cheers
Cheers
Und wie wäre? Wie stelle ich das am besten an?
Hab ich bereits erstellt. Mit awt Layout erstellt und dann mit swing JButtons und JTextFields hinzugeügt. Und eine List mit Strings drinnenDas kommt ganz darauf an, wie du deine GUI erstellen willst. Swing, JavaFX, AWT?
Hab ich bereits^^ ich kann auch nach Dateien suchen, aber wenn ich dann mit einer List<String> in meiner Gui Dateinamen ausgebe, würde ich es geren so haben: Man klickt auf eine Zeile in der Liste und es öffnet sich der Explorer mit der Datei auf die man geklickt und die wird dann markert (halt so, dass man sie sofort sieht)
Runtime.exec(new String[]{"explorer.exe", String.format("/select,\"%s\"", pathToFile)});
Leider klärt das meine Frage noch immer nicht. Ich brauche auch einen ActionListener, der schaut, ob das angeklickt wurdehttps://stackoverflow.com/questions/13680415/how-to-open-explorer-with-a-specific-file-selected
Ungetestet:Runtime.exec(new String[]{"explorer.exe", String.format("/select,\"%s\"", pathToFile)});
EDIT: "Code" nochmal angepasst.
@Override
public void actionPerformed(Actionevent e) {
String ac = e.getActionCommand();
final String[] listData = { "Datei1", "Datei2", "Datei3"};
JList<String> list = new JList<>(listData);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.getSelectionModel().addListSelectionListener(event -> {
ListSelectionModel model = (ListSelectionModel) event.getSource();
if(!model.getValueIsAdjusting()) {
String filename = list.getSelectedValue();
// File im Explorer öffnen ...
}
});
Und in welche Klasse würde ich das schreiben? Hab eine Modelklasse (rechenmethoden mit Rückgaben), eine Controllerklasse (da ist der ActionListener drinnen mit der main) und die Viewklasse (Jpanel)Ich weiß nicht ob du dir den Link von mir mal durchgelesen hast, aber noch mal: ListItems bekommen keinen ActionListener. Hier arbeitet man mit einem ListSelectionListener um herauszufinden, welches Item angeklickt wurde. Hier mal ein kleines Beispiel..
Java:final String[] listData = { "Datei1", "Datei2", "Datei3"}; JList<String> list = new JList<>(listData); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.getSelectionModel().addListSelectionListener(event -> { ListSelectionModel model = (ListSelectionModel) event.getSource(); if(!model.getValueIsAdjusting()) { String filename = list.getSelectedValue(); // File im Explorer öffnen ... } });
In die actionperformed Methode? Sorry für diese Fragen aber ich blicke da gerade echt nicht ganz durchDie JList an sich müssten du wohl in der Viewklasse anlegen - muss ja angezeigt werden. Die Logik um die Datei im Explorer zu öffnen kann wohl in die Controllerklasse - also da wo sich die Logik abspielt
valueChanged(ListSelectionEvent e)
wird immer dann ausgeführt, wenn sich die Auswahl in der Liste ändert. Und das ist genau das was du brauchst. Wenn sich die Auswahl geändert hat, holst du dir von der Liste einfach per JList#getSelectedValue()
den aktuellen Wert aus der Liste und kannst damit anstellen was auch immer du möchtest.Ich habe über die Tage versucht mir das anzueignen, jedoch verstehe ich es noch immer nicht. Ich habe zusätzlich zu der actionPerformed Methode das hierNein nicht in die actionPerformed Methode. Diese Methoden kommt ja aus dem ActionListener Interface und bringt dir in dem Moment nichts. Du nutzt für die JList ja ein ListSelectionListener um Änderungen der Auswahl in einer Liste abzufangen. DievalueChanged(ListSelectionEvent e)
wird immer dann ausgeführt, wenn sich die Auswahl in der Liste ändert. Und das ist genau das was du brauchst. Wenn sich die Auswahl geändert hat, holst du dir von der Liste einfach perJList#getSelectedValue()
den aktuellen Wert aus der Liste und kannst damit anstellen was auch immer du möchtest.
Hier noch mal ein paar Referenzen zum lesen..
How to Write a List Selection Listener
JList Selection Listener Example
Listening to JList Events
Und zusätzlich noch die JavaDoc zum ListSelectionListener
Damit solltest du prinzipiell genug Informationen haben um den oben stehenden, bzw in den Links geposteten, Code zu verstehen.
private class ListSelectionListener implements EventListener {
EventListener
? Hast du dir die oben stehenden Links mal angeschaut? Deine eigene Klassse ListSelectionListener
zu nennen ist eher eine schlechte Idee. ListSelectionListener ist ja bereits ein Interface, welches du benutzen sollst. Das Skelet der Klasse sollte ca so aussehen:public class YourListenerClass implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
// your code here
}
}
Ahh danke! Und wie genau öffne ich jetzt den Explorer? Dein Link ist in C# geschrieben :')Wie kommst du denn jetzt aufEventListener
? Hast du dir die oben stehenden Links mal angeschaut? Deine eigene KlassseListSelectionListener
zu nennen ist eher eine schlechte Idee. ListSelectionListener ist ja bereits ein Interface, welches du benutzen sollst. Das Skelet der Klasse sollte ca so aussehen:
Java:public class YourListenerClass implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent e) { // your code here } }
An welcher Stelle auf den verlinkten Seiten findest du C# Code???Hier noch mal ein paar Referenzen zum lesen..
How to Write a List Selection Listener
JList Selection Listener Example
Listening to JList Events
Und zusätzlich noch die JavaDoc zum ListSelectionListener
Das hat dir doch @mihe7 schon in Post#9 erklärtUnd wie genau öffne ich jetzt den Explorer?
String s = oberfläche.getSelectedValue2();
try {
Runtime.getRuntime().exec("explorer.exe \"C:\\EDD-Files\"" + s);
} catch (IOException e1) {
e1.printStackTrace();
}
Das ist kein C#:Das ist in C#, klick mal auf den Stackoverflow Link
Ungetestet: Runtime.exec(new String[]{"explorer.exe", String.format("/select,\"%s\"", pathToFile)});
Der Code funktioniert leider nichtDas ist kein C#:
Dann ist es a) nicht mein Link gewesen und hatte b) auch nicht im Ansatz etwas mit der GUI zu tun.Genau in dem Post
Lass die Anführungszeichen beim Pfad weg .. alsoHab es so probiert aber irgendwie tut sich nichts
Runtime.getRuntime().exec("explorer.exe /select,C:\\EDD-Files\\" + s);
Dann ist es a) nicht mein Link gewesen und hatte b) auch nicht im Ansatz etwas mit der GUI zu tun.
Lass die Anführungszeichen beim Pfad weg .. alsoRuntime.getRuntime().exec("explorer.exe /select,C:\\EDD-Files\\" + s); [/QUOTE] Ich habs jetzt so gemacht (mit den escape sequenzen), nur leider tut sich trotzdem noch immer nichts [code=Java] Runtime.getRuntime().exec("explorer.exe /select,\\C:\\EDD-Files\\" + s); [/code]
Sorry, da kann ich nicht wirklich helfen, hab grad kein Windows da (darum ungetestet ;-))Der Code funktioniert leider nicht
Problem: Habe in der Arbeit keinen Zugriff auf das cmd. Und auch keine admin Rechte am PC. Könnte es daran liegen?Sorry, da kann ich nicht wirklich helfen, hab grad kein Windows da (darum ungetestet ;-))
Du kannst den Befehl ja einfach mal in der "Eingabeaufforderung" (cmd) per Hand aufrufen und schauen, ob sich was tut.
Ich weiß wie man cmd öffnet. Die Eingabeaufforderung wurde vom Systemadmin aber blockiert, sodass ich weder Windows + R drücke kann, noch manuell über Programme etwas im cmd eingeben kannWindows-Taste und R, dort entwedercmd
oder gleichexplorer.exe /select,C:\EDD-Files\datei
ausführen.
Sorry, ich weiß nicht, ob Du es weißtIch weiß wie man cmd öffnet.
Du darfst aber an dem Rechner schon arbeiten?Die Eingabeaufforderung wurde vom Systemadmin aber blockiert, sodass ich weder Windows + R drücke kann, noch manuell über Programme etwas im cmd eingeben kann
Ja ich arbeite mit Eclipse an dem Rechner. Ich musste einen try block schreiben, weil der Code als rot markiert wird wenn nicht. "Unhandeld IOExcpetion"Sorry, ich weiß nicht, ob Du es weißt
Du darfst aber an dem Rechner schon arbeiten?
Gibt es eigentlich eine Exception?
Könnte man evtl. auch eine Verknüpfung anlegen und das als Ziel eingeben? Einen Versuch ist es wert...oder gleich explorer.exe /select,C:\EDD-Files\datei ausführen.
Ich kann es erst gar nicht ausführe, weil der Code rot markiert wird.Und fliegt eine Exception wenn du das Programm versuchst auszuführen?
OMG. Poste mal die entsprechende Methode.Ich kann es erst gar nicht ausführe, weil der Code rot markiert wird.
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler file:\"" + filepath + "\"");
Macht das unter Windows was anderes als Desktop#open?Ich starte Datei-URLs für gewöhnlich mit diesem Code:
Soweit ich @musterrrmax verstanden habe, möchte er, dass der Explorer das Verzeichnis öffnet UND die Datei ausgewählt wird, ohne sie auszuführen.Damit wird die mit dem Dateityp verknüpfte Anwendung ausgeführt. Im Fall eines Verzeichnisses wäre das für gewöhnlich der Windows Explorer.
Das kann ich nicht sagen, die Klasse DesktopPeer spricht eine native Methode an.Macht das unter Windows was anderes als Desktop#open?
Dann ist die explorer /select Lösung wohl die einfachste.Soweit ich @musterrrmax verstanden habe, möchte er, dass der Explorer das Verzeichnis öffnet UND die Datei ausgewählt wird, ohne sie auszuführen.
Das Verhalten könnte tatsächlich unterschiedlich sein. Unter https://stackoverflow.com/questions/13047158/rundll32-url-dll-fileprotocolhandler wird beschrieben, dass rundll32 bei einem DOTX eine neue Datei erzeugt, während ShellExecute (OPEN) die Vorlage öffnet. Müsste ich jetzt überprüfen, habe aber keine Lust dazuDas kann ich nicht sagen, die Klasse DesktopPeer spricht eine native Methode an.