2008-11-03 31 views
8

我在寫一個需要文件打開對話框的java程序。文件打開對話框並不困難,我希望能使用JFileChooser。我的問題是,我想有一個雙窗格JFrame(由2 JPanels組成)。左側面板將具有JList,右側面板將具有文件打開對話框。JFileChooser嵌入在JPanel中

當我使用JFileChooser.showOpenDialog()這會打開所有其他窗口上方的對話框,這不是我想要的。有沒有辦法讓JFileChooser(或其他文件選擇對話框)在JPanel內顯示,而不是在上面彈出?

這是我試過的代碼,在這一點上它非常簡化。我只是試圖在此時將JFileChooser嵌入到JPanel中。

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

我也打過電話chooser.showOpenDialogthispanel,但無濟於事。另外,我嘗試將JFileChooser直接添加到框架。上面列出的兩種嘗試仍然在框架或面板前面彈出JFileChooser(取決於我添加的JFileChooser)。

回答

10

JFileChooser擴展了JComponent和Component,因此您應該可以直接將其添加到您的框架中。

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

如果您在即時添加JFileChooser,則需要調用revalidate()。

Steve的回答是正確的。您可以將JFileChooser添加到其他容器。

5

要訪問的文件選擇「按鈕」,你將有一個ActionListener添加到它:

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

要約翰內斯:感謝您有用的片段。

相反 「ApproveSelection」 和 「CancelSelection」 我所使用的定義的常量和JFileChooser.APPROVE_SELECTIONJFileChooser.CANCEL_SELECTION