Java actionListeners中的文件选择器
我正在尝试编写一个小的文本编辑器,我正在构建GUI 我添加了一个Java actionListeners中的文件选择器,java,swing,user-interface,jfilechooser,Java,Swing,User Interface,Jfilechooser,我正在尝试编写一个小的文本编辑器,我正在构建GUI 我添加了一个JMenu并向其中添加了一个JMenuItem。我给了菜单项“打开”的值。 原因是我希望当按下“open”时,屏幕上会出现JFileChooser 以下是我所拥有的: public void mousePressed(MouseEvent me) { JFileChooser fs = new JFileChooser(); } 此方法位于一个名为listener的类中,该类实现了MouseListener。这是我一直坚持
JMenu
并向其中添加了一个JMenuItem
。我给了菜单项“打开”的值。
原因是我希望当按下“open”时,屏幕上会出现JFileChooser
以下是我所拥有的:
public void mousePressed(MouseEvent me) {
JFileChooser fs = new JFileChooser();
}
此方法位于一个名为listener的类中,该类实现了MouseListener
。这是我一直坚持的一步
getContentPane()
…不起作用:
我这样做是不是很好的代码实践?有更好的办法吗?如果没有,我该怎么做呢?看看JFileChooser类上的Javadoc。它有一个如何打开它的示例 下面的代码为用户的主目录弹出一个文件选择器,它只能看到.jpg和.gif图像:
首先,不要对
JMenuItem
或JButton
使用MouseListener
,这不是管理这些组件的合适方法,而是使用ActionListener
这主要是因为您的菜单项可以通过键盘快捷键或编程方式触发
第二,“不起作用”不是关于你的问题是什么的信息,但我认为这是因为该方法不存在
一个简单的解决方案是检查事件的源,以确定它是否是组件
,并改用它,或者如果事件的源不是组件
,则使用null
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
Component parent = null;
if (source instanceof Component) {
parent = (Component)source;
}
// Show file chooser dialog...
}
请查看以了解更多详细信息
您还可能会发现一些有趣的内容虽然通常您的方法是可行的,但您可能希望了解的是Swing的概念。JMenuItem直接支持操作,您不需要MouseListener(这对于您的用例来说有点低级) 试着看一看这些例子,一开始它可能看起来有点势不可挡,但最终它是对您想要的东西的一个漂亮而干净的封装。而且它是可重用的,这意味着您也可以在不同的菜单(可能是上下文菜单)上使用该操作
对于您的代码,您缺少对
fs.showOpenDialog(component)
的调用。如果它实现了MouseListener,那么它就不是ActionListener。同时定义“不起作用”。这是对未来问题的提示。试着把a放在一起,这会让别人更容易帮助你。谢谢。我去调查行动。我不太确定的一个特点是,我是否应该为我想要监控的每一个动作都做一个动作,或者只是做一个动作,然后“如果有”检查执行的动作是什么。
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
Component parent = null;
if (source instanceof Component) {
parent = (Component)source;
}
// Show file chooser dialog...
}