2008-11-03 3 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.showOpenDialog с this и panel, но безрезультатно. Кроме того, я попытался добавить JFileChooser непосредственно в фрейм. Обе упомянутые выше попытки по-прежнему отображают JFileChooser перед фреймом или панелью (в зависимости от того, к чему я добавляю JFileChooser).

ответ

10

JFileChooser расширяет JComponent и компонент, чтобы вы могли добавить его прямо в свой фрейм.

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

Если вы добавляете JFileChooser на лету, вам необходимо вызвать revalidate().

Ответ Стива правильный. Вы можете добавить 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_SELECTION и JFileChooser.CANCEL_SELECTION

Смежные вопросы