Frage

Ich schreibe ein Java-Programm, das eine Datei öffnen Dialog muss. Die Datei Öffnen-Dialog ist nicht schwierig, ich bin der Hoffnung, einen JFileChooser zu verwenden. Mein Problem ist, dass ich ein Dual-Fenster JFrame haben möchte (bestehend aus 2 JPanels). Die linke Tafel würde eine JList hat, und das rechte Feld eine Datei Öffnen-Dialog haben würde.

Wenn ich JFileChooser.showOpenDialog() verwenden diese öffnet das Dialogfeld über allen anderen Fenstern, die nicht ist, was ich will. Gibt es eine Möglichkeit, die JFileChooser (oder vielleicht eine andere Datei-Auswahldialog) Anzeige in einem JPanel und nicht Pop-up über ihn haben?

Hier ist der Code, den ich versucht habe, an dieser Stelle ist es sehr vereinfacht wird. Ich versuche nur die JFileChooser zu bekommen in der JPanel an dieser Stelle eingebettet werden.

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();
    }
}

Ich habe auch versucht chooser.showOpenDialog mit this und panel nennen, aber ohne Erfolg. Auch ich habe versucht, direkt mit dem Rahmen der JFileChooser hinzufügen. Sowohl der Versuche, der oben aufgeführt ist nach wie vor die JFileChooser haben Pop-up vor dem Rahmen oder der Platte (je nachdem, welche ich fügen Sie den JFileChooser zu).

War es hilfreich?

Lösung

JFileChooser erstreckt JComponent und Komponenten so sollten Sie in der Lage sein, es zu Ihrem Rahmen direkt hinzuzufügen.

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

Andere Tipps

Um die „Tasten“ in der Dateiauswahl zugreifen, erhalten Sie eine Action ihn hinzufügen müssen:

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();
    }
}

Wenn Sie die JFileChooser on the fly hinzufügen, müssen Sie revalidate () aufrufen.

Steves Antwort ist richtig. Sie können eine JFileChooser auf andere Behälter hinzuzufügen.

Um Johannes:. Dank für Ihren nützlichen Schnipsel

Anstelle von "ApproveSelection" und "CancelSelection" Früher habe ich die definierten Konstanten JFileChooser.APPROVE_SELECTION und JFileChooser.CANCEL_SELECTION

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top