ruta open obtener mkyong gui examples chooser java swing openfiledialog jfilechooser

open - jfilechooser java swing examples



Llevar JFileChooser encima de todas las ventanas (3)

No estoy seguro de cuál es tu problema en realidad (probablemente sea tu Netbeans ... quién sabe), pero ¿has intentado anular el método createDialog ?

Ejemplo:

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; } };

Esto no es más que una solución de pirateo, no debería necesitar hacer eso normalmente.

Parece que tengo un problema con mi implementación muy sencilla de un diálogo selector de archivos que me obliga a minimizar Netbeans cada vez para llegar a él, y se vuelve bastante frustrante, especialmente ahora con las pruebas.

He visto algunas soluciones en línea que incluyen SO, pero ninguna parece funcionar, mientras que otras parecen ser muy largas y complicadas para mi nivel actual.

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()); } }

Algunos de mis intentos incluyen usar;

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

¿Hay algún atributo / método particular que pueda establecer para resolver el problema?


fileSelect.showOpenDialog(this)

Por supuesto, this debe ser un Componente de algún tipo (el JFrame o JPanel de su interfaz principal). Todos los cuadros de diálogo deben tener un componente principal si desea que pasen al frente.


La API para showOpenDialog() hace referencia a showDialog() , que dice: "Si el padre es null , entonces el diálogo no depende de ninguna ventana visible, y se coloca en una posición de ver y sentir dependiente, como el centro del pantalla."

El siguiente ejemplo coloca el selector en el centro de la pantalla en mi L & F. Puede ver cómo se compara con el tuyo.

paquete 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://.com/questions/8507521 * @see http://.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); } } } } }