Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java actionListeners中的文件选择器_Java_Swing_User Interface_Jfilechooser - Fatal编程技术网

Java actionListeners中的文件选择器

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。这是我一直坚持

我正在尝试编写一个小的文本编辑器,我正在构建GUI

我添加了一个
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...
}