JMenu 问题中的 JFileChooser
JFileChooser in a JMenu Issue
我在使用 JMenu 中的 JFileChooser 时遇到问题。目前我已经得到它来为背景 JLabel 设置一个图标,效果很好。但是您只能 select 通过文件夹跳转或使用上层目录按钮来获取文件。如果我尝试使用下拉菜单 select 像桌面这样的目录,例如 JMenu 的焦点消失了,JFileChooser 也消失了,剩下的只是漂浮在那里的下拉菜单。只要您单击任何目录,下拉菜单也会消失并且什么都不做(不是 select 目录)。
到目前为止,这是我的代码:已编辑 更改为测试代码,以便您自己查看问题。
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();
}
}
});
}
}
我已经试过一段时间搞乱设置,但无法弄清楚如何在 select 使用下拉菜单时将注意力集中在菜单上。
任何帮助都会很棒。我确定这是简单而愚蠢的事情,但我似乎无法找到它。
好的,不要将 JFileChooser
添加到 JMenu
,而是添加一个 JMenuItem
,触发时显示选择器对话框
有关详细信息,请参阅 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();
}
}
});
}
}
我在使用 JMenu 中的 JFileChooser 时遇到问题。目前我已经得到它来为背景 JLabel 设置一个图标,效果很好。但是您只能 select 通过文件夹跳转或使用上层目录按钮来获取文件。如果我尝试使用下拉菜单 select 像桌面这样的目录,例如 JMenu 的焦点消失了,JFileChooser 也消失了,剩下的只是漂浮在那里的下拉菜单。只要您单击任何目录,下拉菜单也会消失并且什么都不做(不是 select 目录)。
到目前为止,这是我的代码:已编辑 更改为测试代码,以便您自己查看问题。
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();
}
}
});
}
}
我已经试过一段时间搞乱设置,但无法弄清楚如何在 select 使用下拉菜单时将注意力集中在菜单上。
任何帮助都会很棒。我确定这是简单而愚蠢的事情,但我似乎无法找到它。
好的,不要将 JFileChooser
添加到 JMenu
,而是添加一个 JMenuItem
,触发时显示选择器对话框
有关详细信息,请参阅 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();
}
}
});
}
}