在 java 中创建记事本、更改颜色、更改字体、打印、url、超链接

Creating a notepad in java, color change, font change, print, url, hyperlink

我正在 java 中为 class 作业创建一个记事本。我已经创建了带有文件、编辑、打印、帮助按钮的文本框,下拉菜单可以执行各种选项,我需要帮助更改颜色、更改字体、发送到打印机和帮助下的超链接。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
import java.io.*;

public class MyMenuFrame extends JFrame implements ActionListener {
    private TextArea textArea = new TextArea("", 0,0,TextArea.SCROLLBARS_VERTICAL_ONLY);
    // first, create a MenuBar item
    private MenuBar menuBar = new MenuBar();
    private Menu file = new Menu();
    private Menu edit = new Menu();
    private Menu print = new Menu();
    private Menu help = new Menu();
    // File objects
    // open option
    private MenuItem open = new MenuItem();
    //  save option
    private MenuItem save = new MenuItem();
    // close option!
    private MenuItem close = new MenuItem();

    // Edit objects
    // color option
    private MenuItem color = new MenuItem();
    // font option
    private MenuItem font = new MenuItem();
    // print object
    private MenuItem printSend= new MenuItem();
    // help objects
    private MenuItem about= new MenuItem();
    private MenuItem home=new MenuItem();

    public MyMenuFrame() {
        // set the initial size of the window
        this.setSize(600, 400);
        // set the title of the window
        this.setTitle("MyNotepad");
        // set the default close operation
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // set a default font for the TextArea
        this.textArea.setFont(new Font("Century Gothic", Font.BOLD, 12));
        // this is why we didn't have to worry about the size of the TextArea!
        this.getContentPane().setLayout(new BorderLayout());
        // the BorderLayout bit makes it fill it automatically
        this.getContentPane().add(textArea);

        // add our menu bar into the GUI
        this.setMenuBar(this.menuBar);
        this.menuBar.add(this.file);
        this.menuBar.add(this.edit);
        this.menuBar.add(this.print);
        this.menuBar.add(this.help);

        // create file drop down menu
        this.file.setLabel("File");

        // create open option
        this.open.setLabel("Open");
        //action listener to know when it's been clicked
        this.open.addActionListener(this);
        // keyboard shortcut
        this.open.setShortcut(new MenuShortcut(KeyEvent.VK_O, false));
        // add it to the "File" menu
        this.file.add(this.open);

        // create save option
        this.save.setLabel("Save");
        //action listener to know when it's been clicked
        this.save.addActionListener(this);
        // keyboard shortcut
        this.save.setShortcut(new MenuShortcut(KeyEvent.VK_S, false));
        // add it to the "File" menu
        this.file.add(this.save);

        // create close option
        this.close.setLabel("Exit");
        // action listener to know when it's been clicked
        this.close.setShortcut(new MenuShortcut(KeyEvent.VK_X, false));
        // keyboard shortcut
        this.close.addActionListener(this);
        // add it to the "File" menu
        this.file.add(this.close);

        // create edit drop down menu
        this.edit.setLabel("Edit");
        this.edit.addActionListener(this);
        this.color.setLabel("Color");
        this.font.setLabel("Font");
        this.color.setShortcut(new MenuShortcut(KeyEvent.VK_C,false));
        // color and font change buttons added
        this.edit.add(this.color);
        this.edit.add(this.font);

        // print menu
        this.print.setLabel("Print");
        this.print.addActionListener(this);
        this.printSend.setLabel("Send to Printer");
        // send to printer button and shortcut keys added
        this.print.add(this.printSend);
        this.printSend.setShortcut(new MenuShortcut(KeyEvent.VK_P,false));

        // help menu
        this.help.setLabel("Help");
        this.about.setLabel("About");
        this.home.setLabel("Visit Home");
        this.about.setShortcut(new MenuShortcut(KeyEvent.VK_A,false));
        this.home.setShortcut(new MenuShortcut(KeyEvent.VK_H,false));
        this.help.addActionListener(this);
        // about and homepage buttons added
        this.help.add(this.about);
        this.help.add(this.home);

    }
    public void actionPerformed (ActionEvent e) {
        // if the source of the event was our "close" option
        if (e.getSource() == this.close)
            this.dispose(); // dispose all resources and close the application

            // if the source was the "open" option
        else if (e.getSource() == this.open) {
            JFileChooser open = new JFileChooser(); // open up a file chooser (a dialog for the user to browse files to open)
            int option = open.showOpenDialog(this); // get the option that the user selected (approve or cancel)
            // NOTE: because we are OPENing a file, we call showOpenDialog~
            // if the user clicked OK, we have "APPROVE_OPTION"
            // so we want to open the file
            if (option == JFileChooser.APPROVE_OPTION) {
                // clear the TextArea before applying the file contents
                this.textArea.setText("");
                try {
                    // create a scanner to read the file
                    Scanner scan = new Scanner(new FileReader(open.getSelectedFile().getPath()));
                    // while there's still something to read
                    while (scan.hasNext())
                        this.textArea.append(scan.nextLine() + "\n"); // append the line to the TextArea
                }
                catch (Exception ex) { // catch any exceptions
                    //write to the debug console
                    System.out.println(ex.getMessage());
                }
            }
        }

        //if the source of the event was the "save" option
        else if (e.getSource() == this.save) {
            //open a file chooser
            JFileChooser save = new JFileChooser();
            // similar to the open file, only this time we call
            int option = save.showSaveDialog(this);
            // showSaveDialog instead of showOpenDialog
            // if the user clicked OK
            if (option == JFileChooser.APPROVE_OPTION) {
                try {
                    // create a buffered writer to write to a file
                    BufferedWriter out = new BufferedWriter(new FileWriter(save.getSelectedFile().getPath()));
                    // write the contents of the TextArea to the file
                    out.write(this.textArea.getText());
                    // close the file stream
                    out.close();
                }
                catch (Exception ex) { //catch any exceptions
                    //write to the debug console
                    System.out.println(ex.getMessage());
                }
            }
        }

        else if(e.getSource()==this.color){


        }

        else if(e.getSource()==this.font){
            JFileChooser font= new JFileChooser();
        }

        else if(e.getSource()==this.printSend){
            JFileChooser printSend= new JFileChooser();
        }

        else if(e.getSource()==this.about){
            JFileChooser about= new JFileChooser();
        }

        else if(e.getSource()==this.home){
            JFileChooser home= new JFileChooser();
        }


    }

}

public class MyMenuFrameTest {

public static void main(String args[]) {
    MyMenuFrame notePad = new MyMenuFrame();
    notePad.setVisible(true);
}

}

这些是我的教授指定的参数。 一种。框架的标题是“我的记事本”。 b.创建和添加边框布局。 C。创建一个文本区域来显示内容。将文本区域添加到边框布局的中心。 d.创建一个菜单栏。 e.创建一个文件菜单。为文件菜单设置助记符。是“F”。文件菜单包括三个菜单项。 F。在文件菜单中的每个菜单项之间添加一个分隔符。

我。打开 1. 为菜单项添加快捷方式。它是 ctrl+O。 一种。使用此语法:MenuItem.setAccelerator(KeyStroke.getKeyStr oke('O', CTRL_DOWN_MASK)); 2. 当用户单击它(发生动作事件)时,将创建一个文件选择器,并打开一个打开的对话框。用户select打开一个文本文件,然后单击“打开”,或者用户可以单击“取消”。对资源使用 try 块。 (提示:自动添加 catch 块,点击添加 catch 子句)。

二。保存 1. 为菜单项添加快捷方式。它是 ctrl+S。 2. 当用户单击它(发生动作事件)时,将创建一个文件选择器,并打开一个保存对话框。用户写入文本文件的名称进行保存,然后单击“保存”或者用户可以单击“取消”。用户尝试使用资源块。 (提示:自动添加 catch 块,点击添加 catch 子句)。

三。退出 1. 为菜单项添加快捷方式。它是 ctrl+X。 2. 当用户单击它时(发生动作事件),它终止应用程序。 G。创建编辑菜单。为文件菜单设置助记符。是“D”。编辑菜单包括两个菜单:颜色和字体。 H。在每个子菜单之间添加分隔符。

我。创建颜色菜单。为文件菜单设置助记符。是“丙”。一世。创建更改颜色菜单项。为菜单项添加快捷方式。它是 ctrl+C。

二。当用户单击更改颜色时,将打开一个颜色选择器,用户 select 选择一种颜色。默认情况下,红色为 selected。然后,更改文本的颜色。

j。创建字体菜单。为文件菜单设置助记符。是“F”。 一世。该菜单包括三个单选按钮菜单项:Times New Roman、Arial、Serif。 (提示:您还需要一个按钮组)。当用户 select 使用其中一种字体(发生动作事件)时,文本的字体将发生变化。将字体大小设置为 20.
二.此菜单还包括两个复选框菜单项:粗体、斜体。用户可以 select 两者,只能是粗体,斜体,或者不select 其中任何一个(发生项目事件)。根据用户selection,设置字体。 (提示:如果其中之一未 selected,请将字体设置为普通字体)。将字体大小设置为 20.
三.在单选按钮菜单项和复选框菜单项之间添加分隔符。

k。创建打印菜单。设置打印菜单的助记符。是“P”。一世。打印机菜单包括一个菜单项:发送到打印机。为菜单项添加快捷方式。是ctrl+P。

二。当用户单击它时(发生动作事件),显示一个选项对话框。显示图中的消息。如果用户单击“确定”,则显示消息对话框(设置信息图标)。显示图中的消息。如果用户单击取消,则使当前帧可见。

l。创建一个帮助菜单。为帮助菜单设置助记符。是“H”。米。帮助菜单包括两个菜单项:关于、访问主页。在这些菜单项之间添加一个分隔符。

我。创建一个关于菜单项。为菜单项添加快捷方式。是ctrl+A。

  1. 当用户单击它时(发生动作事件),显示一个显示消息对话框。显示如图所示的消息。显示信息图标。

二。创建一个菜单项,即访问主页。为菜单项添加快捷方式。它是 ctrl+V。 1. 当用户点击它时(发生动作事件),用户将被导航到http://www.microsoft.com。 2. 对于导航,创建一个静态方法(复制它):

public static void openWebpage (String urlString) {
尝试 { Desktop.getDesktop().browse(new URL(urlString).toURI()); }
赶上(异常e){ e.printStackTrace(); } }

然后在执行的操作方法中,调用此静态方法并提供 url 字符串。

n。必要时,导入必要的 classes 和接口。 哦。设置边框为600*400.

根据设计,JTextArea 使用一种字体和一种颜色。请改用 JTextPane

至于字体和颜色菜单操作,请使用 JTextPane 的 getStyledDocument() 方法。

您需要为每个操作创建一个 AttributeSet。如果你看 the documentation, you’ll see many implementing classes. Among them is SimpleAttributeSet, which is sufficient for your needs. Rather than setting its attributes directly, use the methods of StyleConstants.

打印就像调用继承的print()方法一样简单。

不用说,您应该从实际上不需要读取或写入文件的任何操作中删除 JFileChooser 的使用。