Java将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());

}

}

我的一些尝试包括使用;

.requestFocus();

.requestFocusInWindow();

.setVisible();

我可以设置特定的属性/方法来解决问题吗?

回答:

API showOpenDialog()指向showDialog(),它表示:“如果父级为null,则对话框不依赖可见窗口,并且放置在与外观相关的位置,例如屏幕的中心。”

下面的示例将选择器放置在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);

}

}

}

}

}

以上是 Java将JFileChooser置于所有窗口之上 的全部内容, 来源链接: utcz.com/qa/418802.html

回到顶部