ActionLhoners中的FileChooser

时间:2014-01-13 22:21:36

标签: java swing user-interface jfilechooser

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

我添加了JMenu并为其添加了JMenuItem。我给了菜单项“打开”的值。 原因是因为我希望当按下“打开”时,屏幕上会出现JFileChooser

这就是我所拥有的:

public void mousePressed(MouseEvent me) {
    JFileChooser fs = new JFileChooser();
}

此方法位于名为listener的类中,该类实现MouseListener。这是我坚持的一步。

getContentPane() 

..不起作用:

我接近这个方式是不是很好的代码练习?有没有更好的办法?如果不是我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

虽然一般来说您的方法可行,但您可能需要查看Actions的Swing概念。 JMenuItem直接支持动作,你不需要一个MouseListener(对你的用例来说有点低级)。

试着看一下这些例子,一开始看起来有点压倒性,但最后它是一个很好的,干净的封装你想要的东西。它是可重用的,这意味着您可以在不同的菜单(也许是上下文菜单)上使用该操作。

对于您的代码,您错过了对fs.showOpenDialog(component)的调用。

答案 1 :(得分:1)

首先,不要对MouseListenerJMenuItem使用JButton,这不是管理这些组件的适当方法,而是使用ActionListener。< / p>

主要原因是您的菜单项可以通过键盘快捷键或以编程方式触发。

其次“不起作用”不是关于你的问题的信息,但我认为这是因为该方法不存在。

一个简单的解决方案是检查事件的来源以确定它是否为Component并使用它而不是null如果事件的来源不是Component } ...

public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();
    Component parent = null;
    if (source instanceof Component) {
        parent = (Component)source;
    }

    // Show file chooser dialog...
}

请查看How to use menus了解详情

您可能还会发现某些感兴趣的How to use actions

答案 2 :(得分:0)

查看JFileChooser类上的Javadoc。它有一个如何打开它的例子。

  

以下代码会弹出用户主目录的文件选择器,该目录只能看到.jpg和.gif图像:

JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
   System.out.println("You chose to open this file: " +
        chooser.getSelectedFile().getName());
}