Создание блокнота в Java, изменение цвета, изменение шрифта, печать, URL, гиперссылка - PullRequest
0 голосов
/ 24 октября 2019

Я создаю блокнот в Java для назначения класса. Я создал текстовое поле с кнопками «Файл», «Редактировать», «Печать», «Справка» с раскрывающимися списками для выбора различных параметров. Мне нужна помощь с изменением цвета, изменением шрифта, отправкой на принтер и гиперссылками в справке.

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


    }

}

открытый класс MyMenuFrameTest {

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

}

Это параметры, указанные моим профессором. а. Название кадра - «MyNotepad». б. Создать и добавить макет границы. с. Создайте текстовую область для отображения содержимого. Добавьте текстовую область в центр макета границы. д. Создайте строку меню. е. Создать файл меню. Установить мнемонику для файлового меню. Это «F». Файл меню включает в себя три пункта меню. е. Добавьте разделитель между каждым пунктом меню в меню файла.

i. Открыть 1. Добавить ярлык для пункта меню. Это Ctrl + O. а. Используйте этот синтаксис: MenuItem.setAccelerator (KeyStroke.getKeyStr oke ('O', CTRL_DOWN_MASK));2. Когда пользователь щелкает по нему (происходит событие действия), создается средство выбора файлов и открывается открытое диалоговое окно. Пользователь выбирает текстовый файл, чтобы открыть его, а затем нажимает «Открыть» или пользователь может нажать «Отмена». Используйте блок try с ресурсами. (Подсказка: автоматически добавить блок catch, нажмите добавить предложение catch).

ii. Сохранить 1. Добавить ярлык для пункта меню. Это Ctrl + S. 2. Когда пользователь щелкает по нему (происходит событие действия), создается средство выбора файлов и открывается диалоговое окно сохранения. Пользователь пишет имя текстового файла, чтобы сохранить его, а затем нажимает «Сохранить», или пользователь может нажать «Отмена». Пользователь пытается заблокировать ресурсы. (Подсказка: автоматически добавить блок catch, нажмите добавить предложение catch).

iii. Выход 1. Добавьте ярлык для пункта меню. Это Ctrl + X. 2. Когда пользователь щелкает по нему (происходит событие действия), он завершает приложение. грамм. Создать меню редактирования. Установить мнемонику для файлового меню. Это д". Меню Правка включает в себя два меню: Цвет и Шрифт. часДобавьте разделитель между каждым подменю.

i. Создать цветное меню. Установить мнемонику для файлового меню. Это «С». я. Создать пункт меню изменения цвета. Добавьте ярлык для пункта меню. Это Ctrl + C.

ii. Когда пользователь нажимает кнопку «Изменить цвет», открывается окно выбора цвета, и пользователь выбирает цвет. По умолчанию выбран красный цвет. Затем цвет текста меняется.

j. Создать меню шрифтов. Установить мнемонику для файлового меню. Это «F». я. Это меню включает в себя три пункта меню с переключателями: Times New Roman, Arial, Serif. (Подсказка: вам также нужна группа кнопок). Когда пользователь выбирает один из этих шрифтов (происходит действие), шрифт текста изменится. Установите размер шрифта как 20.
ii. Это меню включает в себя также два пункта меню флажка: полужирный, курсив. Пользователь может выбрать оба варианта, только жирный, курсив или отменить выбор любого из них (происходит событие элемента). В зависимости от выбора пользователя, установите шрифт. (Подсказка: если один из них не выбран, установите шрифт как обычный). Установите размер шрифта как 20.
iii. Добавьте разделитель между пунктами меню переключателя и пунктами меню флажка.

к. Создать меню печати. Установите мнемонику для меню печати. Это «П». я. Меню принтера включает в себя один пункт меню: Отправить на принтер. Добавьте ярлык для пункта меню. Это Ctrl + P.

ii. Когда пользователь щелкает по нему (происходит событие), отображается диалоговое окно параметров. Отобразите сообщение на рисунке. Если пользователь нажимает «ОК», отобразить диалоговое окно с сообщением (установить значок информации). Отобразите сообщение на рисунке. Если пользователь нажимает кнопку «Отмена», сделайте текущий кадр видимым.

л. Создать меню справки. Установить мнемонику для меню справки. Это «Н». м. Меню справки включает в себя два пункта меню: О, Посетить домашнюю страницу. Добавьте разделитель между этими пунктами меню.

i. Создать пункт меню, который о. Добавьте ярлык для пункта меню. Это Ctrl + A.

  1. Когда пользователь щелкает по нему (событие события происходитurs), отобразить диалоговое окно показа сообщения. Отобразите сообщение, показанное на рисунке. Показать значок информации.

ii. Создать пункт меню, который посещает домашнюю страницу. Добавьте ярлык для пункта меню. Это Ctrl + V. 1. Когда пользователь щелкает по нему (происходит событие), пользователь переходит к http://www.microsoft.com. 2. Для навигации создайте статический метод (скопируйте его):

public static voidopenWebpage (String urlString) {
try {Desktop.getDesktop (). browse (новый URL (urlString) .toURI ());}
catch (Exception e) {e.printStackTrace ();}}

Затем в методе action, вызванном этим статическим методом, укажите строку URL-адреса.

n. Когда это необходимо, импортируйте необходимые классы и интерфейсы. о. Установить кадр как 600 * 400.

1 Ответ

0 голосов
/ 24 октября 2019

По своему дизайну JTextArea использует один шрифт и один цвет. Вместо этого используйте JTextPane .

Что касается действий с меню шрифтов и цветов, используйте метод getStyledDocument () JTextPane.

Вам потребуетсясоздать набор атрибутов для каждого действия. Если вы посмотрите на документацию , вы увидите много реализующих классов. Среди них есть SimpleAttributeSet , которого достаточно для ваших нужд. Вместо непосредственной установки его атрибутов используйте методы StyleConstants .

Печать так же проста, как вызов унаследованного print () метода.

Излишне говорить, что вы должны исключить использование JFileChooser из любого действия, которое фактически не требует чтения или записи файла.

...