Приведение JFileChooser поверх всех окон

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

Я видел несколько решений в Интернете, в том числе SO, но никто, похоже, не делает этого, в то время как некоторые другие кажутся очень длинными и сложными для моего текущего уровня.

private void fileSearch() { JFileChooser fileSelect = new JFileChooser(); int returnVal = fileSelect.showOpenDialog(null); String pathToFile; if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileSelect.getSelectedFile(); pathToFile = file.getAbsolutePath(); try { P.binaryFileToHexString(pathToFile); } catch (Exception e) { System.out.print("Oops! there was an error there..." + e); } System.out.println("\nYou chose to open this file: " + file.getName()); } } 

Некоторые из моих попыток include использование;

 .requestFocus(); .requestFocusInWindow(); .setVisible(); 

Есть ли конкретный атрибут / метод, который я могу установить для решения проблемы?

API для showOpenDialog() относится к showDialog() , который гласит: «Если родительский showDialog() имеет значение null , то диалоговое окно зависит от того, нет ли видимого windows, и оно помещается в зависимое от внешнего вида положение, такое как центр экран «.

В приведенном ниже примере позиция выбирается в центре экрана на моем L & F. Вы можете видеть, как он сравнивается с вашим.

 package gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.KeyStroke; /** * @see http://stackoverflow.com/questions/8507521 * @see http://stackoverflow.com/questions/5129294 */ public class ImageApp extends JPanel { private static final int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); private JFileChooser chooser = new JFileChooser(); private Action openAction = new ImageOpenAction("Open"); private Action clearAction = new ClearAction("Clear"); private JPopupMenu popup = new JPopupMenu(); private BufferedImage image; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new ImageApp().create(); } }); } public void create() { JFrame f = new JFrame(); f.setTitle("Title"); f.add(new JScrollPane(this), BorderLayout.CENTER); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("File"); menu.setMnemonic('F'); menu.add(new JMenuItem(openAction)); menu.add(new JMenuItem(clearAction)); menuBar.add(menu); f.setJMenuBar(menuBar); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setSize(new Dimension(640, 480)); f.setLocationRelativeTo(null); f.setVisible(true); } public ImageApp() { this.setComponentPopupMenu(popup); popup.add("Popup Menu"); popup.add(new JMenuItem(openAction)); popup.add(new JMenuItem(clearAction)); } @Override public Dimension getPreferredSize() { if (image == null) { return new Dimension(); } else { return new Dimension(image.getWidth(), image.getHeight()); } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, null); } private class ClearAction extends AbstractAction { public ClearAction(String name) { super(name); this.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_C); this.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_C, MASK)); } @Override public void actionPerformed(ActionEvent e) { image = null; revalidate(); repaint(); } } private class ImageOpenAction extends AbstractAction { public ImageOpenAction(String name) { super(name); this.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_O); this.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_O, MASK)); } @Override public void actionPerformed(ActionEvent e) { int returnVal = chooser.showOpenDialog(chooser); if (returnVal == JFileChooser.APPROVE_OPTION) { File f = chooser.getSelectedFile(); try { image = ImageIO.read(f); revalidate(); repaint(); } catch (IOException ex) { ex.printStackTrace(System.err); } } } } } 

Я не уверен, какова ваша проблема (это, вероятно, ваш Netbeans …. кто знает), но попробовали ли вы переопределить метод createDialog ?

Пример:

 JFileChooser fc = new JFileChooser() { @Override protected JDialog createDialog(Component parent) throws HeadlessException { // intercept the dialog created by JFileChooser JDialog dialog = super.createDialog(parent); dialog.setModal(true); // set modality (or setModalityType) return dialog; } }; 

Это просто хакерское решение, вам не нужно делать это обычно.

 fileSelect.showOpenDialog(this) 

Конечно, this должен быть какой-то компонент (JFrame или JPanel вашего основного интерфейса). Все диалоги должны иметь родительский компонент, если вы хотите, чтобы они вышли на фронт.

  • Как изменить цвет подсветки сфокусированного JComboBox
  • Как обновить поле метки каждые 2 секунды в java fx?
  • DocumentListener Java, Как предотвратить пустую строку в JTextBox?
  • Загрузка ресурса изображения
  • JFileChooser.showSaveDialog (...) - как установить предлагаемое имя файла
  • Печать JFrame и его компонентов
  • Изменение размера значка для JButton в Java?
  • Как добавить изображение в JButton
  • Браузер Webkit в приложении Java
  • Как установить жесткий предел для JComponent, когда setMaximumSize () и setPrefferedSize () не работают?
  • Как я могу обновить внешний вид JFreeChart после того, как он станет видимым?
  • Interesting Posts
    Давайте будем гением компьютера.