JFileChooser - znikajace defaultowe rozszerzenie

JFileChooser - znikajace defaultowe rozszerzenie
MI
  • Rejestracja: dni
  • Ostatnio: dni
0

hej,
mam do Was nastepujace pytanie - otoz tworze sobie JFileChoosera i ustawiam mu aby pokazywal domyslnie rozszerzenie:

Kopiuj
 
 jFileChooser.setSelectedFile(new File(".png"));
      if (jFileChooser.showSaveDialog(PrintScreen.getContainer()) == JFileChooser.APPROVE_OPTION) {
                      //rob cos
                    }

Zauwazylam dziwna rzecz-otoz gdy pojawi mi sie ten fileChooser, widze ze ma wpisane ".png", ale jesli usune to "png" i klikne na 'Anuluj', po czym ponownie wywolam jego otworzenie - napis ".png" sie juz nie pojawi! jesli skasuje rozszerzenie i wpisze cos np "abc", klikne 'zapisz', po czym ponownie wywolam jego otworzenie - napis ".png" sie pojawi. Czy ktos z Was ma moze pojecie czym moze to byc spowodowane? Jak zrobic by po skasowaniu napisu i kliknieciu na 'anuluj' napis pojawial sie ponownie??

dodam, ze wyzej podany kod jest wywolywany na metode onMousePressed - czyli za kazdym razem gdy klikam na przycisk, ustawiane jest setSelectedFile no i pojawia sie fileChooser..

pzdr,
misty

  • Rejestracja: dni
  • Ostatnio: dni
0

Do czego służy ta podpowiedź? Jeśli chcesz by użytkownik mógł wybrać tylko pliki PNG, to trzeba działać zupełnie inaczej.

Freakman
  • Rejestracja: dni
  • Ostatnio: dni
0

leżę ze swingowych zabawek ale anuluj zapewne czyści w obiekcie wszystkie pola które można sobie wypełnić w oknie wybory pliku, więc trzeba by przed każdym otwarciem okna ustawiać mu to rozszerzenie

MI
  • Rejestracja: dni
  • Ostatnio: dni
0

bo, nie zrozumiales mnie. nie chce uzyc FileFilter (czy tam ImageFilter, nie pamietam). nie chodzi mi o to by pozwalac tylko na png. chodzi mi o to, by pojawiala sie podpowiedz, w tym okienku gdzie wpisujesz nazwe pliku. podpowiedz w formie rozszerzenia/mojego tekstu.

Freakman, ja wlasnie tak robie. tj-na onMousePressed ustawiam to selectedFile(new File("aaaa")) i otwieram fileChoosera:

Kopiuj
 
                 onMousePressed: function(e: MouseEvent) {
                    jFileChooser.setSelectedFile(new File(".png"));
                    if (jFileChooser.showSaveDialog(PrintScreen.getContainer()) == JFileChooser.APPROVE_OPTION) {
                      //TODO
                    }
                 }

jak widac-na kazdy onMousePressed ten tekst jest wstawiany..

Olamagato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Warszawa
  • Postów: 1066
0

Ściśle mówiąc kodem, który pokazałaś nie tworzysz obiektu JFileChoosera.
Czy przed ponownym otwarciem dialogu ponownie używasz setSelectedFile()?
Wszystko co zmieniasz w dialogu z poziomu GUI zmieniasz też pośrednio w obiekcie z nim związanym (tutaj przez referencję zapisaną w jFileChooser), a ten obiekt u Ciebie nie ginie i nie jest zastępowany innym. Przynajmniej tyle można wywnioskować z tego fragmentu kodu i tego co napisałaś.

  • Rejestracja: dni
  • Ostatnio: dni
0

Zrób tak:

Kopiuj
import javax.swing.filechooser.FileFilter;
import java.io.*;
public class Foo extends FileFilter
{
    public boolean accept(File f)
    {
        return true;
    }
    public String getDescription()
    {
        return "PNG";
    }
}

oraz jeden raz

Kopiuj
jFileChooser.setFileFilter(new Foo());
MI
  • Rejestracja: dni
  • Ostatnio: dni
0

Olamagato, teraz juz tworze za kazdym razem nowa instancje JFileChoosera i jest ok. tylko myslalam ze wystarczy mi raz utworzyc instancje, a pozniej w metodzie onMousePressed sobie tylko ustawiac setSelectedFile i otwierac.

bo, mam wrazenie ze nadal nie rozumiesz o co pytam. Klase ktorej szkielet przedstawiles tez mam zaimplementowana, ale uzywam jej do czego innego. to jest filtr, a mi w tym poscie nie o filtr chodzi. patrz-jak otwierasz JFileChoosera, to na dole masz 2 pola-jeden do wpisania nazwy, drugi to wlasnie filtr (i tam sie wykorzystuje FileFilter wlasnie jak ktos chce miec filtr). Mi chodzi o to pole wyzej-do wpisania nazwy defaultowej (no ja wybralam sobie ze bede tam defaultowo wpisywac rozszerzenie).

to jak np w wordzie-zapisujesz plik i pojawia Ci sie okno 'zapisz jako' - i wlasnie ja to 'zapisz jako' chce uzupelnic moja defaultowa wartoscia. Mam nadz ze teraz rozumiesz o co pytalam:)

   pzdr,
    misty
  • Rejestracja: dni
  • Ostatnio: dni
0

Obawiam się, że nie masz kontroli nad tym co JFileChooser wypisuje w górnym okienku. Po co chcesz tam cokolwiek wpisywać i zmuszać użytkownika do przesuwania kursora?
Można tak:

Kopiuj
String nameOfFile=jFileChooser.getSelectedFile().getAbsolutePath();
if(!nameOfFile.toLowerCase().endsWith(".png"))
{
     nameOfFile+=".png";
}
MI
  • Rejestracja: dni
  • Ostatnio: dni
0

mam kontrole-w sposob w ktory przedstawilam. a chce dodawac rozszerzenie - poniewaz JFileChoosera mam podpietego pod mechanizm screenshotow-po zrobieniu, wyskakuje JFileChooser by podac sciezke gdzie zapisac zrzut. a ze zrzucam do png, to logicznym jest ze powinno sie pojawiac domyslnei rozszerzenie 'png'. Bo wiadomo-malo kto wpisze je reczenie..

ps. to co piszesz jest dla mojego przypadku bez sensu (nadal mam wrazenie ze nie kumasz co pisze). ja jeszcze na poczatku nic nie wybralam-zadnej sciezki, zadnego pliku. ja mam podac domyslny tekst tam.

ten kod ktory podalam na poczatku dziala tak jak chce. aby sie zas pozbyc tego o czym pisalam w 1szym poscie-nalezy najwyrazeniej za kazdym razem tworzyc nowa instancje JFileChooser.

      pzdr i dzieki za wszystkie posty!

        misty
  • Rejestracja: dni
  • Ostatnio: dni
0

To Ty chyba nie rozumiesz mojej ostatniej propozycji. Ona działa tak, jak użytkownik wpisze(wybierze) nazwę zakończoną "png", to nic z wpisaną nazwą nie robimy. Jak wpisze inaczej, to sami uzupełniamy nazwę o ".png".

  • Rejestracja: dni
  • Ostatnio: dni
0

Jeżeli koniecznie chcesz tworzyć za każdym razem nowego JFileChoosera, to chociaż ułatw życie użytkownikowi, który chce wszystkie pliki zapisywać w jednym katalogu.

  1. Utwórz pole typu File o nazwie np. ulubionyKatalog ,
  2. Po użyciu JFileChoosera zapamiętaj katalog: ulubionyKatalog=jFileChooser.getCurrentDirectory();
  3. Kolejny egzemplarz twórz tak jFileChooser=new JFileChooser(ulubionyKatalog);
Olamagato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Warszawa
  • Postów: 1066
0
misty napisał(a)

Olamagato, teraz juz tworze za kazdym razem nowa instancje JFileChoosera i jest ok. tylko myslalam ze wystarczy mi raz utworzyc instancje, a pozniej w metodzie onMousePressed sobie tylko ustawiac setSelectedFile i otwierac.

To co napisał Ci Bo jest najwłaściwszym rozwiązaniem. Najlepiej jest nie tworzyć i niszczyć kolejnych obiektów bo jest to puste przetwarzanie powietrza. Dialog z wyborem pliku powinien pamiętać wybory dokonane przez użytkownika. Zarówno wybór rodzaju pliku jak sobie życzysz jak i katalogu (co zwykle oczekuje użytkownik). Jednak próbujesz to zrobić za pomocą nieprawidłowych narzędzi. Na przykład File(".png") nie jest w żadnym wypadku prawidłowo skonstruowanym obiektem ścieżki do pliku. Działa to częściowo tylko dlatego, że kod JFileChooser potrafi się z błędnych danych wybronić.

  • Rejestracja: dni
  • Ostatnio: dni
0
misty napisał(a)

Zauwazylam dziwna rzecz-otoz gdy pojawi mi sie ten fileChooser, widze ze ma wpisane ".png", ale jesli usune to "png" i klikne na 'Anuluj', po czym ponownie wywolam jego otworzenie - napis ".png" sie juz nie pojawi! jesli skasuje rozszerzenie i wpisze cos np "abc", klikne 'zapisz', po czym ponownie wywolam jego otworzenie - napis ".png" sie pojawi. Czy ktos z Was ma moze pojecie czym moze to byc spowodowane? Jak zrobic by po skasowaniu napisu i kliknieciu na 'anuluj' napis pojawial sie ponownie??

Do Swojego JFileChooser podepnij PropertyChangeListener i zobacz co sie dzieje z selectedFile w momencie gdy klikasz Save/Open, a co gdy klikasz Cancel.
Jesli klikniesz Cancel, wartosc selectedFile nigdy sie nie zmienia, firePropertyChange(SELECTED_FILE_CHANGED_PROPERTY, oldFile, selectedFile) sprawdzi, ze odlFile.equals(selectedFile) i ze nic nie ma do roboty, wiec po prostu sie zakonczy.

Jedyne co musisz zrobic w takim przypadku to odswiezyc Swoj komponent: JFileChooser.updateUI().

MI
  • Rejestracja: dni
  • Ostatnio: dni
0

dzieki. sprostowujac-ja nie chcialam za kazdym razem tworzyc nowej instancji JFC, dlategotez napisalam do Was z prosba o pomoc i rady. Teraz kapuje. No i pomoglo faktycznie updateUI().

         pzdr,
             misty

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.