Java 如何在记事本中放大和缩小JtextArea

Java 如何在记事本中放大和缩小JtextArea,java,swing,zooming,notepad,Java,Swing,Zooming,Notepad,我正在用JavaSwingGUI做一个记事本,我有点被放大和缩小的部分卡住了,我看过很多网站,声称他们有答案,但每次我离开网站时都不知道这个问题。我为每个菜单创建了一个java类,这样我就不会迷失在太多的代码行中,下面是我编写的主要代码 import javax.swing.*; import javax.swing.text.DefaultEditorKit; import javax.swing.undo.UndoManager; import java.awt.event.*; publ

我正在用JavaSwingGUI做一个记事本,我有点被放大和缩小的部分卡住了,我看过很多网站,声称他们有答案,但每次我离开网站时都不知道这个问题。我为每个菜单创建了一个java类,这样我就不会迷失在太多的代码行中,下面是我编写的主要代码

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;
import javax.swing.undo.UndoManager;
import java.awt.event.*;

public class Notepad implements ActionListener {
    JFrame wind;
    JTextArea textA;
    boolean wordWrapOn = true;
    JScrollPane scrollPane;
    JMenuBar menuBar;
    JMenu file, edit, view, help;
    JMenuItem newI, openI,saveI, saveAsI, printI, exit;
    Function_File fil = new Function_File(this);
    Function_View function_view = new Function_View(this);
    Function_Edit function_edit = new Function_Edit(this);
    Function_Help function_help = new Function_Help(this);
    JMenuItem iFontArial, iFontCSMS, iFontTNR, iFontSize8, iFontSize12, iFontSize16, iFontSize20, iFontSize24, iFontSize28;
    JMenuItem color1, color2, color3, color4, color5, color6, BColor1, BColor2, BColor3, BColor4, BColor5, BColor6;
    JMenu menuFont, menuFontSize , menuColor, menuBColor;
    JMenuItem iUndo, iRedo, iCut, iCopy, iPaste, iDelete, iSelectAll;
    JMenuItem vHelp,about;
    JMenuItem findAndReplace;
    JMenu zoom;
    JMenuItem zoomIn, zoomOut;
    JCheckBoxMenuItem iWrap;
    UndoManager undoManager= new UndoManager();


    public static void main(String[] args){
        new Notepad();
    }
    public Notepad(){
        createWind();
        createTextA();
        createMenuBar();
        createFileM();
        createViewMenu();
        createEditMenu();
        createHelpMenu();
        function_view.selectedFont = "Arial";
        function_view.createFont(16);
        function_view.wordWrap();
        wind.setVisible(true);
        ImageIcon icon = new ImageIcon("C:\\Users\\Moatassim\\Downloads\\473800-512.png");
        wind.setIconImage(icon.getImage());
    }

    public void createWind(){
        wind = new JFrame("Notepad");
        wind.setSize(700, 740);
        wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public void createTextA(){
        textA = new JTextArea();
        textA.getDocument().addUndoableEditListener(e -> undoManager.addEdit(e.getEdit()));
        scrollPane = new JScrollPane(textA, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setBorder(BorderFactory.createEmptyBorder());
        wind.add(scrollPane);
    }
    public void createMenuBar(){
        menuBar = new JMenuBar();
        wind.setJMenuBar(menuBar);
        
        file = new JMenu("File");
        menuBar.add(file);

        edit = new JMenu("Edit");
        menuBar.add(edit);

        view = new JMenu("View");
        menuBar.add(view);

        help = new JMenu("Help");
        menuBar.add(help);
    }
    public void createFileM(){
        newI = new JMenuItem("New");
        newI.addActionListener(this);
        newI.setActionCommand("New");
        file.add(newI);
        newI.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\134224-16.png"));
        KeyStroke keyStrokeToNew = KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK);
        newI.setAccelerator(keyStrokeToNew);

        openI = new JMenuItem("Open");
        openI.addActionListener(this);
        openI.setActionCommand("Open");
        file.add(openI);
        openI.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\352375-16.png"));
        KeyStroke keyStrokeToOpen = KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK);
        openI.setAccelerator(keyStrokeToOpen);

        saveI = new JMenuItem("Save");
        saveI.addActionListener(this);
        saveI.setActionCommand("Save");
        file.add(saveI);
        saveI.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\1608823-16.png"));
        KeyStroke keyStrokeToSave = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK);
        saveI.setAccelerator(keyStrokeToSave);

        saveAsI = new JMenuItem("Save As");
        saveAsI.addActionListener(this);
        saveAsI.setActionCommand("Save As");
        file.add(saveAsI);
        saveAsI.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\1608823-16.png"));
        KeyStroke keyStrokeToSaveAs = KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK);
        saveAsI.setAccelerator(keyStrokeToSaveAs);

        printI = new JMenuItem("Print");
        printI.addActionListener(this);
        printI.setActionCommand("Print");
        file.add(printI);
        printI.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\172530-16.png"));
        KeyStroke keyStrokeToPrint = KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK);
        printI.setAccelerator(keyStrokeToPrint);

        exit = new JMenuItem("Exit");
        exit.addActionListener(this);
        exit.setActionCommand("Exit");
        file.add(exit);
        exit.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\3005766-16.png"));
    }

    public void createEditMenu(){
        iUndo = new JMenuItem("Undo");
        iUndo.addActionListener(this);
        iUndo.setActionCommand("Undo");
        edit.add(iUndo);
        iUndo.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\2931166-16.png"));
        KeyStroke keyStrokeToUndo = KeyStroke.getKeyStroke(KeyEvent.VK_Z, KeyEvent.CTRL_DOWN_MASK);
        iUndo.setAccelerator(keyStrokeToUndo);

        iRedo = new JMenuItem("Redo");
        iRedo.addActionListener(this);
        iRedo.setActionCommand("Redo");
        edit.add(iRedo);
        iRedo.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\2931165-16.png"));
        KeyStroke keyStrokeToRedo = KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_DOWN_MASK);
        iRedo.setAccelerator(keyStrokeToRedo);

        iCut = new JMenuItem(new DefaultEditorKit.CutAction());
        iCut.addActionListener(this);
        iCut.setText("Cut");
        iCut.setActionCommand("Cut");
        edit.add(iCut);
        iCut.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\352286-16.png"));
        KeyStroke keyStrokeToCut = KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK);
        iCut.setAccelerator(keyStrokeToCut);

        iCopy = new JMenuItem(new DefaultEditorKit.CopyAction());
        iCopy.addActionListener(this);
        iCopy.setText("Copy");
        iCopy.setActionCommand("Copy");
        edit.add(iCopy);
        iCopy.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\2849804-16.png"));
        KeyStroke keyStrokeToCopy = KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK);
        iCopy.setAccelerator(keyStrokeToCopy);

        iPaste = new JMenuItem(new DefaultEditorKit.PasteAction());
        iPaste.addActionListener(this);
        iPaste.setActionCommand("Paste");
        iPaste.setText("Paste");
        edit.add(iPaste);
        iPaste.setVisible(true);
        iPaste.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\326599-16.png"));
        KeyStroke keyStrokeToPaste = KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK);
        iPaste.setAccelerator(keyStrokeToPaste);

        iDelete = new JMenuItem("Delete");
        iDelete.addActionListener(this);
        iDelete.setActionCommand("Delete");
        edit.add(iDelete);
        iDelete.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\3669361-16.png"));
        KeyStroke keyStrokeToDelete = KeyStroke.getKeyStroke(KeyEvent.VK_D, KeyEvent.CTRL_DOWN_MASK);
        iDelete.setAccelerator(keyStrokeToDelete);

        iSelectAll = new JMenuItem("Select All");
        iSelectAll.addActionListener(this);
        iSelectAll.setActionCommand("Select All");
        edit.add(iSelectAll);
        iSelectAll.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\5760429-16.png"));
        KeyStroke keyStrokeToSelectAll = KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK);
        iSelectAll.setAccelerator(keyStrokeToSelectAll);

        findAndReplace = new JMenuItem("Find & Replace");
        findAndReplace.addActionListener(this);
        findAndReplace.setActionCommand("Find & Replace");
        edit.add(findAndReplace);
        findAndReplace.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\find-and-replace.png"));
        KeyStroke keyStrokeToFAR = KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_DOWN_MASK);
        findAndReplace.setAccelerator(keyStrokeToFAR);
    }

    public void createHelpMenu(){
        vHelp = new JMenuItem("Help");
        vHelp.addActionListener(this);
        vHelp.setActionCommand("Help");
        help.add(vHelp);
        vHelp.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\3669173-16.png"));

        about = new JMenuItem("About Notepad");
        about.addActionListener(this);
        about.setActionCommand("About Notepad");
        help.add(about);
        about.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\2931180-16.png"));
    }

    public void createViewMenu(){
        iWrap = new JCheckBoxMenuItem("Word Wrap : OFF");
        iWrap.addActionListener(this);
        iWrap.setActionCommand("Word Wrap");
        view.add(iWrap);

        zoom = new JMenu("Zoom");
        zoom.addActionListener(this);
        zoom.setActionCommand("Zoom");
        zoom.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\326690-16.png"));
        view.add(zoom);

        zoomIn = new JMenuItem("Zoom In");
        zoomIn.addActionListener(this);
        zoomIn.setActionCommand("Zoom In");
        zoomIn.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\3643761-16.png"));
        zoom.add(zoomIn);

        zoomOut = new JMenuItem("Zoom Out");
        zoomOut.addActionListener(this);
        zoomOut.setActionCommand("Zoom Out");
        zoomOut.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\3643760-16.png"));
        zoom.add(zoomOut);

        menuFont = new JMenu("Font");
        view.add(menuFont);
        menuFont.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\1608890-16.png"));

        iFontArial = new JMenuItem("Arial");
        iFontArial.addActionListener(this);
        iFontArial.setActionCommand("Arial");
        menuFont.add(iFontArial);

        iFontCSMS = new JMenuItem("Comic Sans MS");
        iFontCSMS.addActionListener(this);
        iFontCSMS.setActionCommand("Comic Sans MS");
        menuFont.add(iFontCSMS);

        iFontTNR = new JMenuItem("Times New Roman");
        iFontTNR.addActionListener(this);
        iFontTNR.setActionCommand("Times New Roman");
        menuFont.add(iFontTNR);

        menuFontSize = new JMenu("Font Size");
        view.add(menuFontSize);
        menuFontSize.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\451442-16.png"));

        iFontSize8 = new JMenuItem("8");
        iFontSize8.addActionListener(this);
        iFontSize8.setActionCommand("size8");
        menuFontSize.add(iFontSize8);

        iFontSize12 = new JMenuItem("12");
        iFontSize12.addActionListener(this);
        iFontSize12.setActionCommand("size12");
        menuFontSize.add(iFontSize12);

        iFontSize16 = new JMenuItem("16");
        iFontSize16.addActionListener(this);
        iFontSize16.setActionCommand("size16");
        menuFontSize.add(iFontSize16);

        iFontSize20 = new JMenuItem("20");
        iFontSize20.addActionListener(this);
        iFontSize20.setActionCommand("size20");
        menuFontSize.add(iFontSize20);

        iFontSize24 = new JMenuItem("24");
        iFontSize24.addActionListener(this);
        iFontSize24.setActionCommand("size24");
        menuFontSize.add(iFontSize24);

        iFontSize28 = new JMenuItem("28");
        iFontSize28.addActionListener(this);
        iFontSize28.setActionCommand("size28");
        menuFontSize.add(iFontSize28);

        menuColor = new JMenu("Color");
        menuColor.addActionListener(this);
        menuColor.setActionCommand("Color");
        view.add(menuColor);
        menuColor.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\6140920-16.png"));

        color1 = new JMenuItem("Gray");
        color1.addActionListener(this);
        color1.setActionCommand("Gray");
        menuColor.add(color1);

        color2 = new JMenuItem("Black");
        color2.addActionListener(this);
        color2.setActionCommand("Black");
        menuColor.add(color2);

        color3 = new JMenuItem("Blue");
        color3.addActionListener(this);
        color3.setActionCommand("Blue");
        menuColor.add(color3);

        color4 = new JMenuItem("Red");
        color4.addActionListener(this);
        color4.setActionCommand("Red");
        menuColor.add(color4);

        color5 = new JMenuItem("Green");
        color5.addActionListener(this);
        color5.setActionCommand("Green");
        menuColor.add(color5);

        color6 = new JMenuItem("White");
        color6.addActionListener(this);
        color6.setActionCommand("White");
        menuColor.add(color6);

        menuBColor = new JMenu("Background Col.");
        menuBColor.addActionListener(this);
        menuBColor.setActionCommand("Background Col.");
        view.add(menuBColor);
        menuBColor.setIcon(new ImageIcon("C:\\Users\\Moatassim\\Downloads\\4243299-16.png"));

        BColor1 = new JMenuItem("gray");
        BColor1.addActionListener(this);
        BColor1.setActionCommand("gray");
        menuBColor.add(BColor1);

        BColor2 = new JMenuItem("black");
        BColor2.addActionListener(this);
        BColor2.setActionCommand("black");
        menuBColor.add(BColor2);

        BColor3 = new JMenuItem("blue");
        BColor3.addActionListener(this);
        BColor3.setActionCommand("blue");
        menuBColor.add(BColor3);

        BColor4 = new JMenuItem("red");
        BColor4.addActionListener(this);
        BColor4.setActionCommand("red");
        menuBColor.add(BColor4);

        BColor5 = new JMenuItem("green");
        BColor5.addActionListener(this);
        BColor5.setActionCommand("green");
        menuBColor.add(BColor5);

        BColor6 = new JMenuItem("white");
        BColor6.addActionListener(this);
        BColor6.setActionCommand("white");
        menuBColor.add(BColor6);
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        switch (command) {
            case "New" -> fil.newFile();
            case "Open" -> fil.open();
            case "Save" -> fil.save();
            case "Save As" -> fil.saveAs();
            case "Exit" -> fil.exit();
            case "Word Wrap" -> function_view.wordWrap();
            case "Arial" -> function_view.setFont("Arial");
            case "Comic Sans MS" -> function_view.setFont("Comic Sans MS");
            case "Times New Roman" -> function_view.setFont("Times New Roman");
            case "size8" -> function_view.createFont(8);
            case "size12" -> function_view.createFont(12);
            case "size16" -> function_view.createFont(16);
            case "size20" -> function_view.createFont(20);
            case "size24" -> function_view.createFont(24);
            case "size28" -> function_view.createFont(28);
            case "Gray" -> function_view.changeColor("Gray");
            case "Black" -> function_view.changeColor("Black");
            case "Blue" -> function_view.changeColor("Blue");
            case "Red" -> function_view.changeColor("Red");
            case "Green" -> function_view.changeColor("Green");
            case "White" -> function_view.changeColor("White");
            case "gray" -> function_view.changeBColor("Gray");
            case "black" -> function_view.changeBColor("Black");
            case "blue" -> function_view.changeBColor("Blue");
            case "red" -> function_view.changeBColor("Red");
            case "green" -> function_view.changeBColor("Green");
            case "white" -> function_view.changeBColor("White");
            case  "Undo" -> function_edit.undo();
            case "Redo" -> function_edit.redo();
            case "About Notepad" -> function_help.createAbout();
            case "Help" -> function_help.createHelp();
            case "Delete" -> function_edit.delete();
            case "Select All" -> function_edit.selectAll();
            case "Print" -> fil.print();
        }
    }
}


我不知道您实际上想如何应用缩放(菜单选择中的缩放因子、鼠标滚轮或其他),但我将尝试通过鼠标滚轮提供实现这一点的方法。也就是说,按住键盘CTRL键,并向上(放大)或向下(缩小)滚动鼠标滚轮

这是您的createTextA()方法。我已经为JTextArea组件的JScrollPane添加了一个鼠标滚轮侦听器:

public void createTextA() {
    textA = new JTextArea();
    textA.getDocument().addUndoableEditListener(e -> undoManager.addEdit(e.getEdit()));
    scrollPane = new JScrollPane(textA, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPane.addMouseWheelListener(new java.awt.event.MouseWheelListener() {
        @Override
        public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
            if (evt.isControlDown()) {
                textA.setFont(new java.awt.Font(textA.getFont().getFontName(), textA.getFont().getStyle(),
                                           evt.getUnitsToScroll() > 0 ? textA.getFont().getSize() - 2 
                                           : textA.getFont().getSize() + 2));
            }
        }
    });
    scrollPane.setBorder(BorderFactory.createEmptyBorder());
    wind.add(scrollPane);
}
这是如何工作的:

非常简单,它更改了JTextArea组件的字体大小。鼠标滚轮侦听器应用于JTextArea组件所在的JScrollPane,以避免干扰JTextArea的正常滚动过程,如果直接应用于JTextArea组件本身,会发生这种情况


mouseWheelMoved事件中使用的仅确定字体是否根据鼠标滚轮滚动的方向增加或减少。

1)缩放文本区域的最佳方法是增加字体大小。2) 人们不太可能阅读代码转储,尤其是考虑到大部分代码转储与问题无关。为了更快更好的帮助,请添加一个或。我理解,谢谢您的建议,先生!如果这有助于解决问题,请告诉我。