Create a save/save as dialog box in java that save a newly created file or an edited file
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.
Related videos on Youtube
MassiveCoding
Updated on June 07, 2020Comments
-
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 about 11 yearsWhy is this code AWT? Why was the
JFileChooser
tag added when AWT hasFileDialog
? -
trashgod about 11 yearsAlso, consider refactoring to use
Action
.
-
-
MassiveCoding about 11 yearsthank 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 about 11 yearsRight, you have to create and write the file. See
HTMLDocumentEditor
, cited here, for example. Update you question with any new code.