简体   繁体   中英

FileChooser in actionListeners

I am trying to code a small text editor and I was building the GUI.

I added a JMenu and added a JMenuItem to it. I gave the menu item the value of "open". The reason is because I want that when "open" is pressed a JFileChooser appears on the screen

Here is what I have:

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

This method is in a class called listener which implements MouseListener . This is the step that I'm stuck at.

getContentPane() 

..does not work:

Is it good code practice the way I'm approaching this? Is there a better way? If not how do I go around doing this?

While in general your approach could work, you might want to look into the Swing concept of Actions . JMenuItem has direct support for actions, you would not need a MouseListener (which is a bit to low-level for your usecase).

Try to look at the examples, it might look a little overwhelming at first, but in the end it is a nice and clean encapsulation of what you want. And it is reusable, meaning you could use the action on a different menu (maybe the context menu) as well.

And for your code, you are missing the call to fs.showOpenDialog(component) .

Firstly, don't use a MouseListener for JMenuItem or JButton , this is not the appropriate means for managing these components, instead, use an ActionListener .

The main reason for this is that your menu item could be triggered via a keyboard shortcut or programmatically.

Secondly "does not work" is not information about what you problem is, but I assume it's because the method does not exist.

A simply solution would be to check the source the event to determine if it's a Component or not and use it instead, or null if the source of the event is not a Component ...

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

    // Show file chooser dialog...
}

Take a look at How to use menus for more details

You may also find How to use actions of some interest

Have a look at the Javadoc on the JFileChooser class. It has an example of how to open it.

The following code pops up a file chooser for the user's home directory that sees only .jpg and .gif images:

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());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM