Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    JFrame, JFileChooser e posizionamento su Mac

    ciao!

    ho riscontrato un piccolo problema con il posizionamento del JFileChooser sul Mac.
    allora, dal JFrame A lancio un JFrame B sul quale impostare alcuni dati.
    sul JFrame B ho impostato il alwaysOnTop a true.
    dal JFrame B lancio anche un JFileChooser per impostare una directory.
    se lancio il JFileChooser su linux non ho problemi.
    se lo lancio dal mac questo finisce sotto al JFrame B.
    e non posso spostarlo "sopra", anche selezionandolo e spostandolo rimane sempre ad un livello più basso.
    questo il JFileChooser:
    codice:
    public class ChooseDir {
    
        public static String choose() throws FileNotFoundException {
            JFileChooser fc = null;
            File dir = null;
            if (fc == null) {
                fc = new JFileChooser();
                fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int stato = fc.showOpenDialog(fc);
                if (stato == JFileChooser.APPROVE_OPTION) {
                    dir = fc.getSelectedFile();
                }
            }
            return dir.toString();
        }
    }
    qualche idea su come risolvere??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    codice:
                int stato = fc.showOpenDialog(fc);
    Sicuramente questo è dubbio, cioè passare fc, sé stesso come "parent". Passa il riferimento al frame (B).
    A quel punto sono (quasi) certo che il JFileChooser sta sicuramente sopra il "parent" anche se fosse always-on-top.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    si in effetti a pensarci hai ragione.
    però mi sono attenuto anche agli esempi presenti nei tutorial!

    oppure, altri esempi trovati sono qualcosa del genere:
    codice:
    public class ChooseDir {
    
        public static String choose(JFrame frame) throws FileNotFoundException {
            JFileChooser fc = null;
            File dir = null;
            if (fc == null) {
                fc = new JFileChooser();
                fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int stato = fc.showOpenDialog(frame);
                if (stato == JFileChooser.APPROVE_OPTION) {
                    dir = fc.getSelectedFile();
                }
            }
            return dir.toString();
        }
    }
    in sostanza passare al JFileChooser il componente da cui è richiamato.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    in sostanza passare al JFileChooser il componente da cui è richiamato.
    Sì ma non il JFileChooser stesso! JFileChooser, quando è usato come dialog a sé stante, non viene aggiunto in un layout. Quindi non ha una connessione con un componente top-level (=finestra).

    Si può ad esempio passare come "parent" il JButton la cui azione fa aprire il file chooser. Ma bisogna ricordare che la relazione di stacking parent-child è tra finestre ... non tra una finestra e un componente semplice. Se passi un JButton, Swing cerca di risalire lungo la catena dei contenitori al componente top-level (idem finestra) e quindi il parent alla fine è la finestra che contiene il JButton.


    P.S. se sbirci nel sorgente di JFileChooser, all'interno del createDialog() ad un certo punto fa:

    Window window = JOptionPane.getWindowForComponent(parent);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.