Probleme mit JFileChooser



  • Hi

    ich möchte eine messagebox wem beim JFileChooser eine unzulässige eingabe erfolgte:

    int returnValChar = fcInst.showDialog(this, "Mew File);
    if (returnValChar == JFileChooser.APPROVE_OPTION){
    ...
    }
    

    man sollte meinen wenn ich jetz folgendes mache sollte eine infobox aufgehen:

    // fortsetzung des obigen codes:
    }else{
      JOptionPane.showMessageDialog(.....);
    }
    

    leider nicht. bei fehleingabe geht der weder in den if noch in den else block.

    am konkreten beispiel:

    es soll via dialog ein neues verzeichniss angelegt werden. hierfür soll der name eingeben werden für das neue verzeichniss. wenn dieses verzeichniss nun bereits existiert geht der JFileChooser in diese hinein. Genau das will ich verhindern und statt dessen eine Fehlermeldung anziegen das das verzeichniss bereits existiert und ein anderer name eingegeben werden muss. code steht oben, wo mach ich was falsch ? thx.

    pain



  • Du hast eine falsche herangehensweise

    was du hier machst ist du pruefst den status ab nachdem der JFileChooser schon wieder weg ist.

    wenn du .showDialog() aufrufst oeffnet er den dialog

    dann passiert alles im JFileChooser - das heisst dein programm steht waehrenddessen

    und erst am schluss wenn er dann wirklich zumacht den dialog kommst du zurueck - das nennt man einen modalen dialog

    du willst aber das verhalten des JFileChoosers aendern also musst du folgendes machen

    du erstellst deinen eigenen JPainFileChooser
    der extended JFileChooser

    //quasi so
    class JPainFileChooser extends javax.swing.JFileChooser{
     ...
    }
    

    damit hast du deinen eigenen FileChooser

    jetzt kannst du in der java api nachschauen was die verschiedenen methoden in JFileChooser machen und die methoden die du brauchst ( hier faellt mir gleich approveSelection ins auge)

    das koennte so aussehen

    public void approveSelection(){
           super.approveSelection(); //ruft superklasse auf und macht alles was die macht
          //fuege hier deinen code hinzu
          System.out.println("schon wieder einmal approved mehr");
        }
    

    gomberl



  • Danke für die Antwort. Auf die Idee bin ich noch gar nicht gekommen. Auf die art und weise könnte ich ja alle mir beliebigen methoden überschreiben. Ich habe immer und immer wieder das Problem das der JFileChooser so derart langsam ist das man sofort merkt das man ne Java Anmwendung hat.

    Hast du sonst vielleicht noch ideen und Vorschläge zur beschleunigung im JFileChooser ? Momentan erzeuge ich im main Constructor eine Instanz von JFileChooser welche ich im Prog dann bearbeite. geht schon was schneller.
    aber wenn ich mit: setCurrentDirectory(File file) den Pfad setzen will brauch der immer noch recht langsam. Vielleicht hast du hier auch noch ne idee.

    pain



  • das ist eines der wichtigsten dinge in der objektorientierung
    das solltest du oft ueben damit du ein gefuehl fuer das extenden und ueberladen bekommst

    zum verschnellern
    da hab ich mir noch nicht viele gedanken gemacht
    ich ueberleg mir was
    derweilen kannst du ja in die FAQ schauen und auf die sun java foren
    das sind die besten foren zu java - die benutze ich immer als FAQs - auch wenn es normale foren sind

    erreichst du unter forum.java.sun.com
    du musst dich dort registrieren

    bis dann

    gomberl


Anmelden zum Antworten