Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
habe bei der Suche schon gemerkt das hier nicht zwingend gut auf NetBeans und den GUI-Designer zu sprechen ist. Ich möchte es trotzdem einmal versuchen.
Bin Anfänger und habe schon die Kernfunktionalität meines Programmes "Blattflächenberechnung" fertig. Es summiert die Anzahl aller schwarzen Pixel in einem gescannten Blattbild. Dieser Kern ist aber nur von Kommanodzeile aus nutzbar. Damit die Praktikanten aber auch ne gewohnte GUI haben möchte ich eben nun auch noch so was. Der Aufhänger ist das ich die JFileChooser Dialog aufrufen möchte (für die Bild/Scanauswahl) unter dem Menü Datei->Öffnen.
Wie bekomme ich das mit Netbeans hin. (Ja, so ein Thema gab es schon, ich will mich aber nicht damit zufrieden geben alles per Hand zu machen, wenn es sowas wie einen GUI-Designer gibt - bin ja auch kein Informatiker der das unbedingt braucht.)
achso, mit dem GUI-Designer komme ich im groben schon klar. Das Problem ist das JFileChooser nur ständig in den normalen Frame angezeigt wird. Aber esmüsste doch irgendwie eine eigene Klasse dafür geben die ich dann mit dem MenuItem "Öffnen" aufrufe - oder?
Klar gibt es eine eigene Klasse für den JFileChooser.
Übergib doch einfach für Deinen Menüpunkt die Angaben für den JFileChooser,
so wie Du Sie am ehesten benötigst:
Code:
// neue Instanz erzeugen
JFileChooser fc = new JFileChooser();
// öffnet das Dialogfenster
int file = fc.showOpenDialog(this);
// abfragen, ob Datei gewählt wurde oder nicht
if (file == fc.APPROVE_OPTION) {
// mach was wenn eine Datei gewählt wurde
}
else {
// mach was bei Abbruch
}
Joo danke. Habe es noch selbst hinbekommen. Ich ging halt erst davon aus, das ich auch diesen Dialog einfach so "reinziehen" könnte. Und als ich dann versuchte das in eine Funktion zu machen erkannte er erst den Dialog nicht. Beim genaueren betrachten des generierten NetBeans-Code wusste ich auch wieso. Es scheint so als ob NetBeans total auf die "import"-Anweisungen am Anfang verzichtet - weshalb "JFileChooser" eben nicht "gekannt" wird. Es muss halt mit ".. new javax.swing.jFileChooser" explizit angelegt werden.
Jetzt bin ich fast fertig. Lediglich noch das Ergebnis - also den Dateinamen - aus dem Dateiauswahldialog extrahieren (vielleicht noch eine Dateivorauswahl *.gif, *.png) und dann meine Kernklasse aufrufen.
hab' mal eine Klasse aufgegriffen die den FileFilter nutzt.
Mit dieser lassen sich gewünschte Dateiformate ganz einfach anzeigen:
Code:
import java.io.File;
import javax.swing.filechooser.FileFilter;
public class MyFilter
extends FileFilter {
private String ext;
private String desc;
private boolean acceptDirs = true;
public MyFilter(String ext) {
this.ext = ext;
this.desc = ext + "-Files (" + generateExtensionString(ext) + ")";
}
public MyFilter(String ext, String desc) {
this.ext = ext;
this.desc = desc + " (" + generateExtensionString(ext) + ")";
}
public String getDescription() {
return desc;
}
public boolean accept(File f) {
if (f.isDirectory() && acceptDirs) {
return true;
}
if (!isMultiExtensionString(ext)) {
return f.getName().endsWith(ext);
}
String[] exts = ext.split(",");
for (int i = 0; i < exts.length; i++) {
if (f.getName().endsWith(exts[i])) {
return true;
}
}
return false;
}
protected boolean isMultiExtensionString(String ext) {
return ext.indexOf(',') >= 0;
}
protected String generateExtensionString(String ext) {
String[] exts = ext.split(",");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < exts.length; i++) {
sb.append("*.");
sb.append(exts[i]);
if (i != exts.length - 1) {
sb.append(",");
}
}
return sb.toString();
}
}
Das ganze musst Du nur noch in Deinem Code verwenden,
habe ich gleich mal für Dich vorbereitet.
Auch eine Abfrage des Files ist gegeben
Code:
public static void main(String[] args) {
// neue Instanz
JFileChooser fc = new JFileChooser();
// Mehrfach-Selektion abschalten
fc.setMultiSelectionEnabled(false);
// die Auswahl 'Alle Dateien anzeigen' abschalten
fc.setAcceptAllFileFilterUsed(false);
// den eigenen Datei-Filter einfügen
fc.addChoosableFileFilter(new MyFilter("gif,png","GIFs,PNGs"));
// Dialog öffnen
int file = fc.showOpenDialog(null);
// prüfen, ob Datei gewählt wurde
if (file == fc.APPROVE_OPTION) {
// gib Pfad zur gewählten Datei aus
System.out.println(fc.getSelectedFile().toString());
} else {
System.out.println("Keine Datei ausgewhlt!");
}
}
Du kannst mit der Klasse MyFilter ganz einfach alle möglich Formate definieren,
die Du anzeigen lassen möchtest.
Beispiel:
Code:
new MyFilter("gif,png","GIFs,PNGs");
Der erste String übergibt den Filter, der zweite String die Beschreibung.
Die jeweilige Unterscheidung erfolgt durch die Trennung mit einem Komma innerhalb des Strings.
So kannst Du beliebig viele Filter einbauen...