在JFrame中间组合JFileChooser

时间:2014-07-24 19:26:10

标签: java jframe jfilechooser

我正在用Java编写一个小程序,用于管理计算机中的文件。 我尝试将JFileChooser.showSaveDialog()放在框架的中间,通过创建一个面板并将其放在框架的中间:

JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(150,150) );

    JFileChooser chooseFile = new JFileChooser();
    chooseFile.showSaveDialog(panel);

    frame.getContentPane().add(BorderLayout.CENTER,panel);

    frame.setSize(400,400);
    frame.setVisible(true);

但实际上,当showSaveDialog()命令发生时,框架变得不可见。 我可以改变吗?

2 个答案:

答案 0 :(得分:1)

并不是JFrame不可见,而是从未设置为可见。我假设您希望在调用 showSaveDialog()时看到JFrame。由于缺乏细节,这就是我要提供的:

    javax.swing.JFrame frame = new javax.swing.JFrame();
    frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

    javax.swing.JPanel panel = new javax.swing.JPanel();
    panel.setPreferredSize(new java.awt.Dimension(150,150) );

    javax.swing.JFileChooser chooseFile = new javax.swing.JFileChooser(); frame.getContentPane().add(java.awt.BorderLayout.CENTER,panel);

    frame.setSize(400,400);
    frame.setVisible(true);
    chooseFile.showSaveDialog(panel);



编辑:我重读了你的问题,并认为你可能想把JFileChooser放在面板上,问题是模棱两可的。你可能想要这个:

    javax.swing.JFrame frame = new javax.swing.JFrame();
    frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    javax.swing.JPanel panel = new javax.swing.JPanel();
    panel.setPreferredSize(new java.awt.Dimension(150,150) );
    javax.swing.JFileChooser chooseFile = new javax.swing.JFileChooser(); frame.getContentPane().add(java.awt.BorderLayout.CENTER,panel);
    chooseFile.setPreferredSize(new java.awt.Dimension(400, 400));
    frame.setSize(400,440);
    frame.setVisible(true);
    panel.add(chooseFile);<br><br>

答案 1 :(得分:0)

保存对话框FileChooser是一个模态对话框。这意味着当我们调用chooseFile.showSaveDialog(panel);时,文件对话框将获得焦点,并且在关闭对话框之前用户无法与面板交互。这通常是我们想要的行为。

如果我们想创建某种文件管理器,那么您可能想尝试将JFileChooser添加到面板中。由于JFileChooser扩展了组件,你可以这样做,但它需要更多的代码和更多的了解swing。这个SO question地址将JFileChooser添加到JPanel。