2008-11-03 28 views
8

Estoy escribiendo un programa en Java que necesita un diálogo para abrir archivos. El cuadro de diálogo Abrir archivo no es difícil, estoy esperando usar un JFileChooser. Mi problema es que me gustaría tener un panel doble JFrame (que consta de 2 JPanels). El panel izquierdo tendría un JList, y el panel derecho tendría un diálogo de abrir archivo.JFileChooser incrustado en un JPanel

Cuando uso JFileChooser.showOpenDialog() Esto abre el cuadro de diálogo por encima de todas las demás ventanas, que no es lo que quiero. ¿Hay alguna manera de tener la JFileChooser (o tal vez otro cuadro de diálogo de selección de archivos) pantalla dentro de un JPanel y no pop-up por encima de ella?

Este es el código que he intentado, en este momento está muy simplificado. Solo estoy intentando que el JFileChooser se incruste en el JPanel en este momento.

public class JFC extends JFrame{ 
    public JFC() 
    { 
     setSize(800,600); 

     JPanel panel= new JPanel(); 

     JFileChooser chooser = new JFileChooser(); 
     panel.add(chooser); 

     setVisible(true); 

     chooser.showOpenDialog(null); 
    } 

    public static void main(String[] args) 
    { 
     JFC blah = new JFC(); 
    } 
} 

También he intentado llamar chooser.showOpenDialog con this y panel, pero fue en vano. Además, he intentado agregar el JFileChooser directamente al marco. Los dos intentos enumerados anteriormente todavía tienen el JFileChooser emergente frente al marco o panel (dependiendo de a qué agregue el JFileChooser).

Respuesta

10

JFileChooser extiende JComponent y componentes por lo que debe ser capaz de añadir directamente a su marco.

JFileChooser fc = ... 
JPanel panel ... 
panel.add(fc); 
3

Si va a añadir el JFileChooser sobre la marcha, tendrá que llamar revalidate().

respuesta de Steve es correcta. Puede agregar un JFileChooser a otros contenedores.

5

Para acceder a los "botones" en el selector de archivos, tendrá que añadir un ActionListener a ella:

fileChooser.addActionListener(this); 
[...] 

public void actionPerformed(ActionEvent action) 
{ 
    if (action.getActionCommand().equals("CancelSelection")) 
    { 
     System.out.printf("CancelSelection\n"); 
     this.setVisible(false); 
     this.dispose(); 
    } 
    if (action.getActionCommand().equals("ApproveSelection")) 
    { 
     System.out.printf("ApproveSelection\n"); 
     this.setVisible(false); 
     this.dispose(); 
    } 
} 
2

Para Johannes: Gracias por su fragmento útil.

En lugar de "ApproveSelection" y "CancelSelection" Tenía las constantes definidas JFileChooser.APPROVE_SELECTION y JFileChooser.CANCEL_SELECTION