2008-11-03 32 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