JFileChooser嵌入在JPanel中

我正在编写一个需要文件打开对话框的java程序。 文件打开对话框并不难,我希望使用JFileChooser 。 我的问题是我希望有一个双窗格JFrame (由2个JPanels组成)。 左侧面板将具有JList ,右侧面板将具有文件打开对话框。

当我使用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(); } } 

我也尝试用thispanel调用chooser.showOpenDialog ,但无济于事。 另外,我尝试将JFileChooser直接添加到框架中。 上面列出的两个尝试仍然会在框架或面板前弹出JFileChooser (取决于我将JFileChooser添加到其中)。

JFileChooser扩展了JComponent和Component,因此您应该能够将它直接添加到您的框架中。

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

要访问文件选择器中的“按钮”,您必须向其添加一个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(); } } 

如果要动态添加JFileChooser,则需要调用revalidate()。

史蒂夫的回答是正确的。 您可以将JFileChooser添加到其他容器。

致约翰内斯:感谢你的实用代码片段。

而不是“ApproveSelection”和“CancelSelection”我使用了定义的常量JFileChooser.APPROVE_SELECTIONJFileChooser.CANCEL_SELECTION

Interesting Posts