DirectoryChooser: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springenK |
K (→Ähnliche Themen) |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=FileTree= | =FileTree= | ||
− | < | + | <syntaxhighlight lang="java"> |
package tests.swing; | package tests.swing; | ||
Zeile 141: | Zeile 141: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
=FileTreeRenderer= | =FileTreeRenderer= | ||
− | < | + | <syntaxhighlight lang="java"> |
package tests.swing; | package tests.swing; | ||
Zeile 177: | Zeile 177: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
=FileTreeTest= | =FileTreeTest= | ||
− | < | + | <syntaxhighlight lang="java"> |
package tests.swing; | package tests.swing; | ||
Zeile 238: | Zeile 238: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
=Ähnliche Themen= | =Ähnliche Themen= | ||
Zeile 245: | Zeile 245: | ||
{{Fragen stellen}} | {{Fragen stellen}} | ||
− | + | --[[Benutzer:Roar]] (© Janni Kovacs - 03.12.2005, 21:23) | |
− | [[ | ||
[[Kategorie:Swing]] | [[Kategorie:Swing]] | ||
[[Kategorie:Java-Codeschnipsel]] | [[Kategorie:Java-Codeschnipsel]] | ||
− |
Aktuelle Version vom 7. November 2018, 12:57 Uhr
Inhaltsverzeichnis
FileTree
package tests.swing;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
public class FileTree extends JTree implements TreeWillExpandListener {
private static class FileComparator implements Comparator<File> {
public int compare(File f1, File f2) {
if(f1.isDirectory() ^ f2.isDirectory()) {
return (f1.isDirectory() ? -1 : 1);
}
return f1.getName().compareToIgnoreCase(f2.getName());
}
}
private static class DirectoryFilter implements FileFilter {
public boolean accept(File f) {
return f.isDirectory();
}
}
private static class AcceptAllFilter implements FileFilter {
public boolean accept(File f) {
return true;
}
}
private static final Comparator<File> FILE_COMPARATOR = new FileComparator();
/** Ein FileFilter, der nur Verzeichnisse akzeptiert */
public static final FileFilter DIRECTORY_FILTER = new DirectoryFilter();
/** Ein FileFilter der alle Typen von Dateien und Verzeichnisse akzeptiert */
public static final FileFilter ACCEPT_ALL_FILTER = new AcceptAllFilter();
/** Der aktuelle FileFilter */
protected FileFilter filter = null;
public FileTree() {
// Home Verzeichnis feststellen
File homeDir = FileSystemView.getFileSystemView().getHomeDirectory();
// Wurzelelement erstellen
DefaultMutableTreeNode root = new DefaultMutableTreeNode(homeDir);
// Model erstellen mit root als Wurzelelement
DefaultTreeModel model = new DefaultTreeModel(root);
setModel(model);
setShowsRootHandles(true);
// TreeCellRenderer setzen.
setCellRenderer(new FileTreeRenderer());
// Wurzel aufklappen
expandPath(root);
// Listener hinzufügen
addTreeWillExpandListener(this);
// und so ...
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
}
/**
* Erweitert einen Pfad im Tree.
*
* @param d Den Parent Knoten
*/
private void expandPath(final DefaultMutableTreeNode d) {
d.removeAllChildren();
File[] tempf = ((File) d.getUserObject()).listFiles();
List<File> files = Arrays.asList(tempf);
Collections.sort(files, FILE_COMPARATOR);
DefaultMutableTreeNode temp = null;
for(File file: files) {
if(filter != null && !filter.accept(file))
continue;
temp = new DefaultMutableTreeNode(file);
if(file.isDirectory())
temp.add(new DefaultMutableTreeNode(null));
d.add(temp);
}
((DefaultTreeModel) getModel()).reload(d);
}
/**
* Setzt den FileFilter und setzt den Tree zurück.
*
* @param f Der neue FileFilter
*/
public void setFileFilter(FileFilter f) {
filter = f;
expandPath((DefaultMutableTreeNode) getModel().getRoot());
}
/**
* Liefert den aktuell gesetzten FileFilter zurück
* @return Den FileFilter
*/
public FileFilter getFileFilter() {
return filter;
}
public File getSelectedFile() {
TreePath selectionPath = getSelectionPath();
if(selectionPath == null)
return null;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();
return (File) node.getUserObject();
}
public void treeWillCollapse(TreeExpansionEvent e) {
((DefaultMutableTreeNode) (e.getPath().getLastPathComponent())).removeAllChildren();
((DefaultMutableTreeNode) (e.getPath().getLastPathComponent())).add(new DefaultMutableTreeNode(null));
}
public void treeWillExpand(TreeExpansionEvent e) {
expandPath((DefaultMutableTreeNode) (e.getPath().getLastPathComponent()));
}
}
FileTreeRenderer
package tests.swing;
import java.awt.Component;
import java.io.File;
import javax.swing.JTree;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
class FileTreeRenderer extends DefaultTreeCellRenderer {
private FileSystemView fsv = FileSystemView.getFileSystemView();
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
Object user = ((DefaultMutableTreeNode) value).getUserObject();
if(user instanceof File) {
File f = (File) user;
String name = f.getName();
setIcon(fsv.getSystemIcon(f));
setText(fsv.getSystemDisplayName(f));
}
return this;
}
}
FileTreeTest
package tests.swing;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.border.Border;
public class FileTreeTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
final JFrame f = new JFrame("Datei auswählen");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final FileTree chooser = new FileTree();
chooser.setFileFilter(FileTree.DIRECTORY_FILTER);
JScrollPane scrp = new JScrollPane(chooser);
Border empty = BorderFactory.createEmptyBorder(5, 5, 2, 5);
scrp.setBorder(BorderFactory.createCompoundBorder(empty, scrp.getBorder()));
JPanel bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT));
bottom.add(new JButton(new AbstractAction("OK") {
public void actionPerformed(ActionEvent e) {
File file = chooser.getSelectedFile();
String s = "'" + file+ "'";
if(file == null)
s = "nix";
JOptionPane.showMessageDialog(f, "Es wurde "+s+" selektiert.");
f.dispose();
}
}));
f.add(scrp);
f.add(bottom, BorderLayout.SOUTH);
f.setSize(300, 400);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
Ähnliche Themen
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.
--Benutzer:Roar (© Janni Kovacs - 03.12.2005, 21:23)