2013-07-08 6 views
0

Я создаю мастер открытия файлов, а JFileChooser открывается из кнопки обзора в начальном окне. В настоящее время я настроен таким образом, чтобы кнопка обзора открывала это первое окно и одновременно открывала окно JFileChooser. Я предпочел бы, чтобы окно было удалено после пользователь выбрал их файл, если они хотят отменить и вернуться в исходное окно - этого в настоящее время невозможно.Закрытие предыдущего окна от кнопки JFileChooser Open

Вот соответствующий код:

class BrowseButton extends JButton { 

    public BrowseButton(String name, final JPanel pane) { 

     super(name); 
     addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       JFileChooser fileopen = new JFileChooser();    
       FileFilter filter = new FileNameExtensionFilter("dwg files", "dwg"); 
       fileopen.addChoosableFileFilter(filter); 

       int ret = fileopen.showDialog(pane, "Open"); 

       if (ret == JFileChooser.APPROVE_OPTION) { 
        File file = fileopen.getSelectedFile(); 
        String[] layers = getFileLayers(file.getPath()); 
        openLayerWindow(layers); 
       } 

      } 
     }); 
     addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       dispose(); 
      } 
     }); 
    } 

и когда кнопка инстанциируется ...

//Bottom Panel 
    final JPanel bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 

    BrowseButton browse = new BrowseButton("Browse...", bottom); 
    browse.setMnemonic(KeyEvent.VK_B); 
    CloseButton close = new CloseButton("Close"); 
    close.setMnemonic(KeyEvent.VK_C); 

    bottom.add(close); 
    bottom.add(browse); 
    basic.add(bottom); 
+0

Для более эффективной помощи следует отправить сообщение [SSCCE] (http://sscce.org/). –

+0

Не могли бы вы сбросить 'dispose' и просто' setVisible (false) 'вместо этого? Затем проверьте, выбран ли файл или нет. –

+0

JFileChooser можно поместить в диалог. Таким образом, пользователь закрывает окно, нажимая кнопки «ОК» или «Отмена». http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html –

ответ

2

Вы можете воспользоваться SwingUtilities.getWindowAncestor для получения содержащего окна вашего BrowseButton и размещают его только если пользователь выбирает APPROVE_OPTION.

class BrowseButton extends JButton { 

    public BrowseButton(String name, final JPanel pane) { 

     super(name); 
     addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       JFileChooser fileopen = new JFileChooser();    
       FileFilter filter = new FileNameExtensionFilter("dwg files", "dwg"); 
       fileopen.addChoosableFileFilter(filter); 

       int ret = fileopen.showDialog(pane, "Open"); 

       if (ret == JFileChooser.APPROVE_OPTION) { 
        SwingUtilities.getWindowAncestor(BrowsButton.this).dispose(); 
        File file = fileopen.getSelectedFile(); 
        String[] layers = getFileLayers(file.getPath()); 
        openLayerWindow(layers); 
       } 

      } 
     }); 
    } 
+0

Это сработало отлично, спасибо! –

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