2015-04-01 5 views
1

У меня проблема с JFileChooser в JMenu. В настоящее время у меня есть, чтобы установить значок на фоне JLabel, который отлично работает. Но вы можете выбрать только файл из перескакивания через папки или с помощью кнопки верхнего каталога. Если я попытаюсь использовать раскрывающееся меню, чтобы выбрать «Справочник, например Рабочий стол», например, фокус с JMenu уходит, а также JFileChooser, все, что осталось, - это выпадающее меню, просто плавающее там. Как только вы нажимаете на любой каталог, выпадающее меню также исчезает и ничего не делает (не выбирает каталог).JFileChooser в выпуске JMenu

Это мой код: Отредактировано Изменено, чтобы проверить код, чтобы вы могли убедиться в этом.

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JMenuBar; 
import javax.swing.JMenu; 
import javax.swing.JFileChooser; 

public class test { 
private JFrame frame; 

public test() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 686, 462); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JMenuBar menuBar = new JMenuBar(); 
    frame.setJMenuBar(menuBar); 

    JMenu mntest = new JMenu("test"); 
    menuBar.add(mntest); 

    JFileChooser fileChooser = new JFileChooser(); 
    mntest.add(fileChooser); 

} 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       test window = new test(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
} 

Я пытался возиться с установкой на некоторое время теперь, но не могу понять, как держать фокус на меню при выборе из выпадающего меню.

Любая помощь будет отличной. Я уверен, что это что-то простое и глупое, но я не могу найти его.

+0

Обычно вы используете ' JFileChooser # showOpenDialog' или эквивалент. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer

+0

Код был обновлен благодаря подсказке =) – wardas23

ответ

2

Ладно, не добавить JFileChooser в JMenu, вместо этого, добавьте JMenuItem, который при срабатывании показывает Choosers диалог

См How to Use File Choosers для более подробной информации

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class Test { 

    private JFrame frame; 

    public Test() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 686, 462); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JMenuBar menuBar = new JMenuBar(); 
     frame.setJMenuBar(menuBar); 

     JMenu mntest = new JMenu("test"); 
     menuBar.add(mntest); 
     JMenuItem mi = new JMenuItem("Open..."); 
     mntest.add(mi); 

     mi.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser fileChooser = new JFileChooser(); 
       switch (fileChooser.showOpenDialog(frame)) { 
        case JFileChooser.APPROVE_OPTION: 
         // Open file... 
         break; 
       } 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Test window = new Test(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 
+0

Спасибо за помощь, я подумал, что мне, возможно, придется это сделать, мне просто понравился внешний вид этого меню, но nevermind – wardas23

+0

Проблема заключается в том, что после того, как фокус меню теряется, он закрывается: P – MadProgrammer

+0

Да, я надеялся, что вы сможете сосредоточиться на нескольких. Но это работает также не так хорошо, как выглядит: P – wardas23

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