zhangchanggong003实验内容:第一题:1.定义一个窗口,有菜单,文件和编辑,有两个文本区。2.文件中有菜单项:打开和保存。对打开菜单项设置快捷键“O”,对保存菜单项设置快捷键“Ctrl+

实验内容:
第一题:
1.定义一个窗口,有菜单,文件和编辑,有两个文本区。
2.文件中有菜单项:打开和保存。对打开菜单项设置快捷键“O”,对保存菜单项设置快捷键“Ctrl+s”,打开和保存菜单项之间有分割线。
3.编辑菜单中有复制,剪切,粘贴三个菜单项,要求点击菜单项时在文本区可操作。
第二题:
创建一个窗口,有三个组件如下要求:
1.有一个列表,其选项为你所在电脑的两个java源文件的名字。当选择一个选项后,会在文本区显示所选择的Java源文件的全部内容
2.有一个文本框和一个密码框:当在密码框输入密码时,密码框显示回显字符;回车后,在文本框显示密码。当在文本框输入信息后,将窗口名字改为文本框输入的信息。
3.窗口布局,自选
第三题:
定义一个窗口,有菜单:文件、编辑和计算。文件栏中可以执行对文件打开、新建和保存。编辑栏可进行复制、粘贴和剪切操作。计算栏可计算圆的面积。
第一题
代码实现:
package com.company;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import java.awt.*;
import java.awt.event.*;
public class Main {
    public static void main(String[] args) {
        EditWindow win=new EditWindow(); }
}
class EditWindow extends JFrame implements ActionListener{
    JMenuBar menubar;
    JMenu menu1,menu2;
    JMenuItem item1,item2,item3,item4,item5;
    JSplitPane splitpane;
    JTextArea text1,text2;
    EditWindow(){
        menubar=new JMenuBar();
        menu1=new JMenu("菜单");
        menu2=new JMenu("编辑");
        item1=new JMenuItem("打开");
        item2=new JMenuItem("保存");
        item3=new JMenuItem("复制");
        item4=new JMenuItem("剪切");
        item5=new JMenuItem("粘贴");
        item1.setAccelerator(KeyStroke.getKeyStroke('o'));   item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
        menu1.add(item1);
        menu1.addSeparator();
        menu1.add(item2);
        menu2.add(item3);
        menu2.addSeparator();
        menu2.add(item4);
        menu2.addSeparator();
        menu2.add(item5);
        menubar.add(menu1);
        menubar.add(menu2);
        setJMenuBar(menubar);
        text1=new JTextArea();
        text2=new JTextArea();
        splitpane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,text1,text2);
        splitpane.setDividerLocation(120);
        add(splitpane,BorderLayout.CENTER);
        setBounds(300,300,400,300);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        item3.addActionListener(this);
        item4.addActionListener(this);
        item5.addActionListener(this);
}
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==item3) {
            text1.copy();}
        else if(e.getSource()==item4) {
            text1.cut();
        }
        else if(e.getSource()==item5)
            text2.paste(); }
}
程序截图:

第二题:
代码实现:
package com.company;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.*;
public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            MainFrame mainFrame = MainFrame.getInstance();
            mainFrame.setBounds(10, 10, 450, 400);
            mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            mainFrame.setVisible(true);
        });
    }
}
class WenjianLiebiao extends JComboBox<String> {
    private static class MyItemListener implements ItemListener {
        public void itemStateChanged(ItemEvent e) {
            File dir = new File(System.getProperty("user.dir"));
            File javaFile = null;
            if (e.getItem().toString().equalsIgnoreCase("oop.java")) {
                javaFile = new File(dir, "oop.java");
            } else if (e.getItem().toString().equalsIgnoreCase("002.java")) {
                javaFile = new File(dir, "002.java");
            } else {
                return;
            }
            if (!javaFile.exists()) return;
            try (
                    FileReader fileReader = new FileReader(javaFile);
                    BufferedReader bufferedReader = new BufferedReader(fileReader);
            ) {
                char[] buffer = new char[1024];
                int bytesRead = 0;
                WenbenKuang wenbenKuang = WenbenKuang.getInstance();
                wenbenKuang.setText("");
                do {
                    bytesRead = bufferedReader.read(buffer);
                    if (bytesRead > 0)
                        wenbenKuang.append(new String(buffer));
                } while (bytesRead > 0);
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public WenjianLiebiao() {
        addItem("oop.java");
        addItem("002.java");
        addItemListener(new MyItemListener());
    }
}

class Input {
    static class InputText extends JTextField {
        private InputText() {
            addActionListener(e -> {
                MainFrame.getInstance().setTitle(getText());
            });
        }

        private static final InputText INPUT_TEXT = new InputText();

        public static InputText getInstance() {
            return INPUT_TEXT;
        }
    }

    static class InputPassword extends JPasswordField {
        private InputPassword() {
            addActionListener(e -> {
                InputText.getInstance().setText(new String(getPassword()));
            });
        }

        private static final InputPassword INPUT_PASSWORD = new InputPassword();

        public static InputPassword getInstance() {
            return INPUT_PASSWORD;
        }
    }
}
class WenbenKuang extends JTextArea {
    private static final WenbenKuang JAVA_FILE_TEXT_AREA = new WenbenKuang();
    private WenbenKuang() {
    }
    public static WenbenKuang getInstance() {
        return JAVA_FILE_TEXT_AREA;
    }
}
class MainFrame extends JFrame {
    private static final MainFrame mainFrame = new MainFrame();
    private MainFrame() {
        setLayout(null);
        Input.InputText inputText = Input.InputText.getInstance();
        inputText.setBounds(10, 10, 100, 30);
        Input.InputPassword inputPassword = Input.InputPassword.getInstance();
        inputPassword.setBounds(120, 10, 100, 30);
        WenjianLiebiao comboList = new WenjianLiebiao();
        comboList.setBounds(230, 10, 100, 30);
        WenbenKuang wenbenKuang = WenbenKuang.getInstance();
        JScrollPane jScrollPane = new JScrollPane(wenbenKuang);
        jScrollPane.setBounds(10, 45, 330, 300);
        add(inputText);
        add(inputPassword);
        add(comboList);
        add(jScrollPane);
    }
    public static MainFrame getInstance() {
        return mainFrame;
    }
}


程序截图:

第三题:
代码实现:
package com.company;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.*;
public class Main {
    public static void main(String[] args) {
        ZhuChuangKou zhuChuangKou = ZhuChuangKou.getInstance();
        zhuChuangKou.setVisible(true);
    }
}
class CaiDanLan extends JMenuBar {
    static class FileOpenAction extends AbstractAction {
        public void actionPerformed(ActionEvent e) {
            WenBenKuang.getInstance().setText("");
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.showOpenDialog(ZhuChuangKou.getInstance());
            File file = fileChooser.getSelectedFile();
            if (file == null) {
                WenBenKuang.getInstance().setFileName(null);
                return;}
            FileSaveAction.duWenjian(file);}
    }
    static class CalcAction extends AbstractAction {
        public void actionPerformed(ActionEvent e) {
            JDialog dialog = new JDialog(ZhuChuangKou.getInstance(), true);
            dialog.setSize(200, 200);
            int x = ZhuChuangKou.getInstance().getX() + (ZhuChuangKou.getInstance().getWidth() - dialog.getWidth()) / 3;
            int y = ZhuChuangKou.getInstance().getY() + (ZhuChuangKou.getInstance().getHeight() - dialog.getHeight()) / 3;
            dialog.setLayout(null);
            JTextField textField = new JTextField();
            textField.setBounds(0, 0, 200, 25);
            JLabel label = new JLabel();
            label.setBounds(0, 30, 200, 25);
            label.setText("面积: ");
            textField.getDocument().addDocumentListener(new DocumentListener() {
                public void insertUpdate(DocumentEvent e) {
                    parse();}
                public void removeUpdate(DocumentEvent e) {
                    parse();}
                public void changedUpdate(DocumentEvent e) {
                    parse();}
                public void parse() {
                    try {
                        int r = Integer.parseInt(textField.getText());
                        label.setText("面积: " + (r * r * Math.PI));
                    } catch (Exception ex) {
                        label.setText("面积: ");
                    }
                }
            });
            dialog.add(textField);
            dialog.add(label);
            dialog.setLocation(x, y);
            dialog.setVisible(true);
        }
    }
    public CaiDanLan() {
        add(menu1());
        add(menu2());
        add(menu3());
    }
    private JMenu menu1() {
        JMenu menu = new JMenu("文件");
        menu.addSeparator();
        JMenuItem open = new JMenuItem("打开"), create = new JMenuItem("新建"), save = new JMenuItem("保存");
        open.addActionListener(new FileOpenAction());
        create.addActionListener(e -> {
            WenBenKuang.getInstance().setText("");
            ZhuChuangKou.getInstance().setTitle("文本编辑器");
        });
        open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK));
        create.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK));
        save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK));
        save.addActionListener(new FileSaveAction());
        menu.add(open);
        menu.add(create);
        menu.add(save);
        return menu;}
    private JMenu menu2() {
        JMenu menu = new JMenu("编辑");
        JMenuItem copy = new JMenuItem("复制"), cut = new JMenuItem("剪切"), paste = new JMenuItem("粘贴");
        menu.add(copy);
        menu.addSeparator();
        menu.add(cut);
        menu.addSeparator();
        menu.add(paste);
        copy.addActionListener(e -> {
            WenBenKuang.getInstance().copy();
        });
        paste.addActionListener(e -> {
            WenBenKuang.getInstance().paste();
        });
        cut.addActionListener(e -> {
            WenBenKuang.getInstance().cut();
        });
        return menu;
    }
    private JMenu menu3() {
        JMenu menu = new JMenu("计算");
        menu.addSeparator();
        JMenuItem circle = new JMenuItem("求圆面积");
        circle.addActionListener(new CalcAction());
        menu.add(circle);
        return menu;
    }
    private static class FileSaveAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String fileName = WenBenKuang.getInstance().getFileName();
            if (fileName == null) {
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.showSaveDialog(ZhuChuangKou.getInstance());
                File file = fileChooser.getSelectedFile();
                if (file == null) return;
                if (!file.exists()) {
                    try {
                        boolean newFile = file.createNewFile();
                        if (!newFile) {
                            return;
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();}
                }
                WenBenKuang.getInstance().setFileName(file.getAbsolutePath());
                duWenjian(file);
                return;
            }
            try {
                FileWriter out = new FileWriter(fileName, false);
                BufferedWriter bufferedWriter = new BufferedWriter(out);             WenBenKuang.getInstance().setText(WenBenKuang.getInstance().getText().replace("\0", ""));
                bufferedWriter.write(WenBenKuang.getInstance().getText());
                bufferedWriter.flush();
                bufferedWriter.close();
                out.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        private static void duWenjian(File file) {
            try {
           BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
                char[] buf = new char[1024];
                while (true) {
                    int bytesRead = bufferedReader.read(buf);
                    if (bytesRead <= 0) break;
                    WenBenKuang textArea = WenBenKuang.getInstance();
                    textArea.setText(textArea.getText() + (new String(buf)));
                }
                WenBenKuang.getInstance().setFileName(file.getAbsolutePath());
            } catch (IOException ex) {
                ex.printStackTrace();}
        }
    }
}
class WenBenKuang extends JTextArea {
    private String fileName = null;
    private static final WenBenKuang WEN_BEN_KUANG = new WenBenKuang();
    public static WenBenKuang getInstance() {
        return WEN_BEN_KUANG;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
class ZhuChuangKou extends JFrame {
    private static final ZhuChuangKou ZHU_CHUANG_KOU = new ZhuChuangKou();
    private ZhuChuangKou() {
        CaiDanLan menuBar = new CaiDanLan();
        setJMenuBar(menuBar);
        JScrollPane scrollPane = new JScrollPane(WenBenKuang.getInstance());
        add(scrollPane);
        setBounds(100, 100, 400, 400);
        setTitle("文本编辑器");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static ZhuChuangKou getInstance() {
        return ZHU_CHUANG_KOU;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangchanggong00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值