Create a save/save as dialog box in java that save a newly created file or an edited file

21,592

Even an AWT program can use Action to encapsulate functionality and prevent (rather than suppress) leaking this in constructor. For example,

private static JavaEdit frame;
...
public JavaEdit() {
    ...
    saveMI = fileMenu.add(new MenuItem("Save"));
    saveMI.addActionListener(new SaveAction());
    ...
}

private static class SaveAction extends AbstractAction {

    @Override
    public void actionPerformed(ActionEvent e) {
        FileDialog fDialog = new FileDialog(frame, "Save", FileDialog.SAVE);
        fDialog.setVisible(true);
        String path = fDialog.getDirectory() + fDialog.getFile();
        File f = new File(path);
        // f.createNewFile(); etc.
    }

public static void main(String[] argv) {
    // create frame
    frame = new JavaEdit();
    ...
    // show the frame
    frame.pack();
    frame.setVisible(true);
}

See HTMLDocumentEditor, cited here, for example implementations of related actions.

Share:
21,592

Related videos on Youtube

MassiveCoding
Author by

MassiveCoding

Updated on June 07, 2020

Comments

  • MassiveCoding
    MassiveCoding almost 4 years

    Java Beginner: Please help been working on this for days and my brain is dead. I have created a java program (in eclipse) that has 3 menu: FILE, EDIT, HELP once file is clicked it display 4menuBar: 'new, open,save,save as & exit.

    On the HELP menu there is a menuBar that says "About javaEdit" All my menu bars work except save, save as and the "About javaEdit" I need some code or a clear step by step explanation for dummy on how to have my save and save as working.

    Save should save newly created file or edited file & finally i could like the "About JavaEdit to display a message like "thank you, this is java" once clicked. I could like something like

    private void doSave(){code here} 
    

    and

    private void doSaveAs (){ 
    

    because I have those item in the if else if statement.

    How to create a save/save as dialog box in java that save a newly created file or an edited file?

    Below is my entire code:

    import java.awt.*;
    import java.awt.event
    import java.io.*;
    
    public class JavaEdit extends Frame implements ActionListener {
    
        String clipBoard;
        String fileName;
        TextArea text;
        MenuItem newMI, openMI, saveMI, saveAsMI, exitMI;
        MenuItem selectAllMI, cutMI, copyMI, deleteMI, pasteMI;
        MenuItem aboutJavaEditMI;
    
        /**
         * Constructor
         */
        public JavaEdit() {
            super("JavaEdit");          // set frame title
            setLayout(new BorderLayout());  // set layout
    
        // create menu bar
            MenuBar menubar = new MenuBar();
            setMenuBar(menubar);
    
        // create file menu
            Menu fileMenu = new Menu("File");
            menubar.add(fileMenu);
            newMI = fileMenu.add(new MenuItem("New"));
            newMI.addActionListener(this);
            openMI = fileMenu.add(new MenuItem("Open"));
            openMI.addActionListener(this);
            fileMenu.addSeparator();
            saveMI = fileMenu.add(new MenuItem("Save"));
            saveAsMI = fileMenu.add(new MenuItem("Save As ..."));
            fileMenu.addSeparator();
            exitMI = fileMenu.add(new MenuItem("Exit"));
            exitMI.addActionListener(this);
    
        // create edit menu
            Menu editMenu = new Menu("Edit");
            menubar.add(editMenu);
            selectAllMI = editMenu.add(new MenuItem("Select all"));
            selectAllMI.addActionListener(this);
    
            cutMI = editMenu.add(new MenuItem("Cut"));
            cutMI.addActionListener(this);
    
            copyMI = editMenu.add(new MenuItem("Copy"));
            copyMI.addActionListener(this);
    
            pasteMI = editMenu.add(new MenuItem("Paste"));
            pasteMI.addActionListener(this);
    
            deleteMI = editMenu.add(new MenuItem("Delete"));
            deleteMI.addActionListener(this);
    
        // create help menu
            Menu helpMenu = new Menu("Help");
            menubar.add(helpMenu);
            aboutJavaEditMI = helpMenu.add(new MenuItem("About JavaEdit"));
            aboutJavaEditMI.addActionListener(this);
    
            // create text editing area
            text = new TextArea();
            add(text, BorderLayout.CENTER);
        }
    
        // implementing ActionListener
        public void actionPerformed(ActionEvent event) {
            Object source = event.getSource();
            if(source == newMI) {
                clearText();
                fileName = null;
                setTitle("JavaEdit");   // reset frame title
            }
            else if(source == openMI) {
                doOpen();
            }
        else if(source == saveMI) {
                doSave();
        }
        else if(source == saveAsMI){
        doSaveAs();
        }
            else if(source == exitMI) {
                System.exit(0);
            }
            else if(source == cutMI) {
                doCopy();
                doDelete();
            }
            else if(source == copyMI) {
                doCopy();
            }
            else if(source == pasteMI) {
                doPaste();
            }
            else if(source == deleteMI) {
                doDelete();
            }
        }
    
        /**
         * method to specify and open a file
         */
        private void doOpen() {
            // display file selection dialog
            FileDialog fDialog = new FileDialog(this, "Open ...", FileDialog.LOAD);
            fDialog.setVisible(true);
            // Get the file name chosen by the user
            String name = fDialog.getFile();
    
        // If user canceled file selection, return without doing anything.
            if(name == null)
                return;
            fileName = fDialog.getDirectory() + name;
    
        // Try to create a file reader from the chosen file.
            FileReader reader=null;
            try {
                reader = new FileReader(fileName);
            } catch (FileNotFoundException ex) {
                MessageDialog dialog = new MessageDialog(this, "Error Message",
                                                         "File Not Found: "+fileName);
                    dialog.setVisible(true);
                    return;
            }
    
            BufferedReader bReader = new BufferedReader(reader);
    
        // Try to read from the file one line at a time.
            StringBuffer textBuffer = new StringBuffer();
            try {
                String textLine = bReader.readLine();
                while (textLine != null) {
                    textBuffer.append(textLine + '\n');
                    textLine = bReader.readLine();
            }
                bReader.close();
                reader.close();
            } catch (IOException ioe) {
                MessageDialog dialog = new MessageDialog(this, "Error Message",
                                           "Error reading file: "+ioe.toString());
                dialog.setVisible(true);
                return;
            }
            setTitle("JavaEdit: " +name);   // reset frame title
            text.setText(textBuffer.toString());
        }   
    
        /**
         * method to clear text editing area
         */
        private void clearText() {
            text.setText("");
        }
    
        /**
         * method to copy selected text to the clipBoard
         */
        private void doCopy() {
            clipBoard = new String(text.getSelectedText());
        }
    
        /**
         * method to delete selected text
         */
        private void doDelete() {
            text.replaceRange("", text.getSelectionStart(), text.getSelectionEnd());
        }
    
        /**
         * method to replace current selection with the contents of the clipBoard
         */
        private void doPaste() {
            if(clipBoard != null) {
                text.replaceRange(clipBoard, text.getSelectionStart(),
                                  text.getSelectionEnd());
            }
        }
    
        /**
         * class for message dialog
         */
        class MessageDialog extends Dialog implements ActionListener {
            private Label message;
            private Button okButton;
    
         // Constructor
            public MessageDialog(Frame parent, String title, String messageString) {
                super(parent, title, true);
                setSize(400, 100);
                setLocation(150, 150);
                setLayout(new BorderLayout());
    
                message = new Label(messageString, Label.CENTER);
                add(message, BorderLayout.CENTER);
    
                Panel panel = new Panel(new FlowLayout(FlowLayout.CENTER));
                add(panel, BorderLayout.SOUTH);
                okButton = new Button(" OK ");
                okButton.addActionListener(this);
                panel.add(okButton);
            }
    
        // implementing ActionListener
            public void actionPerformed(ActionEvent event) {
                setVisible(false);
                dispose();
            }
        }
    
        /**
         * the main method
         */
        public static void main(String[] argv) {
            // create frame
            JavaEdit frame = new JavaEdit();
            Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
            frame.setSize(size.width-80, size.height-80);
            frame.setLocation(20, 20);
    
            // add window closing listener
    
            frame.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
         // show the frame
            frame.setVisible(true);
        }
    }
    
    • Andrew Thompson
      Andrew Thompson about 11 years
      Why is this code AWT? Why was the JFileChooser tag added when AWT has FileDialog?
    • trashgod
      trashgod about 11 years
      Also, consider refactoring to use Action.
  • MassiveCoding
    MassiveCoding about 11 years
    thank U trashgod, U pointed me in the right direction. i can now display the save dialog box but it can't save any file! I want it to be able to save the file with the original file name if it was opened for editing but if new file was created i want the option of "save as" to come up. here is the code that bring up the save dialog 'private void doSave(){ FileDialog fDialog = new FileDialog(frame, "Save", FileDialog.SAVE); fDialog.setVisible(true); String name = fDialog.getDirectory()+fDialog.getFile(); File file = new File(name);'
  • trashgod
    trashgod about 11 years
    Right, you have to create and write the file. See HTMLDocumentEditor, cited here, for example. Update you question with any new code.