⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editor.java

📁 对于java开发环境的编写
💻 JAVA
字号:
package org.loon.framework.ide.test;
/**
 * <p>Title: LoonFramework</p>
 * <p>Description:</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: LoonFramework</p>
 * @author chenpeng  
 * @email:ceponline@yahoo.com.cn 
 * @version 0.1
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.UndoableEditEvent;
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;

import org.loon.framework.ide.test.data.ConfigData;
import org.loon.framework.ide.test.data.LineData;

class Editor extends UndoManager
    implements CaretListener, ActionListener, KeyListener
{
	  JPanel panel;
	    JPanel panelCenter;
	    JScrollPane scroll;
	    JPanel panelNorth;
	    JLabel label;
	    JLabel labelName;
	    JPanel panelNorthWest;
	    JTextField textLine;
	    Font font;
	    int lineCount;
	    JavaText textEdit;
	    File currentFile;
	    Color color[];
	    ConfigData config;
	    Document udDocument;
	    boolean boolChange;
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public Editor(ConfigData configdata)
    {
        panel = new JPanel();
        panelCenter = new JPanel();
        scroll = new JScrollPane(panelCenter);
        panelNorth = new JPanel();
        label = new JLabel("", 4);
        labelName = new JLabel("", 0);
        panelNorthWest = new JPanel();
        textLine = new JTextField();
        lineCount = 1;
        textEdit = new JavaText();
        boolChange = false;
        config = configdata;
        font = configdata.getLastFont();
        color = configdata.getAllColor();
        textEdit.setFont(font);
        textEdit.setForeground(color[1]);
        textEdit.setBackground(color[0]);
        panel.setLayout(new BorderLayout());
        panel.add("Center", scroll);
        panel.add("North", panelNorth);
        panelCenter.setLayout(new GridLayout(1, 1));
        panelCenter.add("Center", textEdit);
        panelNorth.setLayout(new BorderLayout());
        panelNorth.add("West", panelNorthWest);
        panelNorth.add("East", label);
        panelNorth.add("Center", labelName);
        panelNorthWest.setLayout(new GridLayout(1, 2));
        panelNorthWest.add(textLine);
        panelNorthWest.add(new JLabel("目标行"));
        panelNorth.setBackground(new Color(240, 240, 240));
        panelNorthWest.setBackground(new Color(240, 240, 240));
        labelName.setForeground(Color.blue);
        labelName.setFont(new Font("宋体", 0, 13));
        textLine.addActionListener(this);
        textEdit.addCaretListener(this);
        textEdit.addKeyListener(this);
        udDocument = textEdit.getDocument();
        udDocument.addUndoableEditListener(this);
    }

    public void caretUpdate(CaretEvent caretevent)
    {
        int i = textEdit.getCaretPosition();
        LineData linedata = getLineCount(i);
        label.setText("光标:" + linedata.getLine() + "行 " + linedata.getCharacter() + "列");
    }

    public void actionPerformed(ActionEvent actionevent)
    {
       
        try
        {
            int i = Integer.parseInt(textLine.getText());
            if(i <= 0)
                throw new Exception();
            String s = textEdit.getText();
            LineData linedata = getLineCount(s.length());
            if(linedata.getLine() < i)
                i = linedata.getLine();
            jump(i);
        }
        catch(Exception exception)
        {
            label.setText("所在行号错误!");
        }
        textEdit.requestFocus();
    }

    public JPanel getPanel()
    {
        return panel;
    }

    public void editorUndo()
    {
        if(canUndo())
            undo();
    }

    public void editorRedo()
    {
        if(canRedo())
            redo();
    }

    public boolean changeDocument()
    {
        return boolChange;
    }

    public void openFile(File file)
        throws Exception
    {
        FileReader filereader = new FileReader(file);
        textEdit.read(filereader, file);
        filereader.close();
        currentFile = file;
        setMark(textEdit, color);
        setCursor();
        udDocument = textEdit.getDocument();
        udDocument.addUndoableEditListener(this);
        boolChange = false;
        labelName.setText(getCurrentAbusolutePath());
    }

    public void saveFile()
        throws Exception
    {
        udDocument.removeUndoableEditListener(this);
        int i = textEdit.getCaretPosition();
        textEdit.deleteCode("\r");
        textEdit.insertCode("\r");
        FileWriter filewriter = new FileWriter(currentFile);
        textEdit.write(filewriter);
        filewriter.close();
        setMark(textEdit, color);
        textEdit.setCaretPosition(i);
        setCursor();
        udDocument = textEdit.getDocument();
        udDocument.addUndoableEditListener(this);
        boolChange = false;
        labelName.setText(getCurrentAbusolutePath());
    }

    public void saveHTML(String s)
        throws Exception
    {
        String s1 = textEdit.getText();
        StringBuffer stringbuffer = new StringBuffer("");
        stringbuffer.append("<HTML><HEAD><TITLE>" + getCurrentName() + "</TITLE></HEAD>\r\n<BODY>\r\n");
        for(int i = 0; i < s1.length(); i++)
        {
            String s2 = s1.substring(i, i + 1);
            if(s2.equals(" "))
                stringbuffer.append("&nbsp;");
            else
            if(s2.equals("\n"))
                stringbuffer.append("<BR>\r\n");
            else
            if(!s2.equals("\r"))
                stringbuffer.append(s2);
        }

        stringbuffer.append("</BODY></HTML>");
        BufferedWriter bufferedwriter = new BufferedWriter(new FileWriter(s));
        bufferedwriter.write(stringbuffer.toString());
        bufferedwriter.close();
    }

    public void saveFileForEnd(String s)
        throws Exception
    {
        StringBuffer stringbuffer = new StringBuffer(s);
        for(int i = stringbuffer.length() - 1; i >= 0; i--)
            if(stringbuffer.substring(i, i + 1).equals("\r"))
                stringbuffer.delete(i, i + 1);

        for(int j = stringbuffer.length() - 1; j >= 0; j--)
            if(stringbuffer.substring(j, j + 1).equals("\n"))
                stringbuffer.insert(j, "\r");

        BufferedWriter bufferedwriter = new BufferedWriter(new FileWriter(currentFile));
        bufferedwriter.write(stringbuffer.toString());
        bufferedwriter.close();
    }

    public void deleteCode()
    {
        int i = textEdit.getCaretPosition();
        textEdit.deleteCode("\r");
        setMark(textEdit, color);
        textEdit.setCaretPosition(i);
    }

    public boolean setCurrentFile(File file)
    {
        currentFile = file;
        if(file != null)
            return file.exists();
        else
            return false;
    }

    public void setMark(JavaText javatext, Color acolor[])
    {
        javatext.setMark(acolor);
    }

    public File getCurrentFile()
    {
        return currentFile;
    }

    public String getCurrentName()
    {
        if(currentFile == null)
            return null;
        else
            return currentFile.getName();
    }

    public String getOnlyName()
    {
        String s = currentFile.getName();
        int i = 0;
        for(i = s.length() - 1; i > 0 && !s.substring(i, i + 1).equals("."); i--);
        if(i > 0)
            return s.substring(0, i);
        else
            return null;
    }

    public String getPathOnlyName()
    {
        String s = currentFile.getAbsolutePath();
        int i = 0;
        for(i = s.length() - 1; i > 0 && !s.substring(i, i + 1).equals("."); i--);
        if(i > 0)
            return s.substring(0, i);
        else
            return null;
    }

    public String getCurrentAbusolutePath()
    {
        if(currentFile == null)
            return null;
        else
            return getCurrentFile().getAbsolutePath();
    }

    public String getCurrentParent()
    {
        if(currentFile == null)
            return null;
        else
            return getCurrentFile().getParent();
    }

    public void setText(String s)
    {
        textEdit.setText(s);
    }

    public String getText()
    {
        return textEdit.getText();
    }

    public JavaText getJavaText()
    {
        return textEdit;
    }

    public LineData getLineCount(int i)
    {
        int j = 1;
        int k = 1;
        String s = textEdit.getText();
        for(int l = 0; l < i; l++)
        {
            if(s.substring(l, l + 1).equals("\n"))
            {
                j++;
                k = 0;
            }
            k++;
        }

        return new LineData(j, k);
    }

    public void jump(int i)
    {
        int j = 1;
        String s = textEdit.getText();
        for(int k = 0; k < s.length(); k++)
            if(s.substring(k, k + 1).equals("\n") && ++j == i)
            {
                textEdit.setCaretPosition(k + 1);
                return;
            }

        textEdit.setCaretPosition(0);
    }

    public void selectAll()
    {
        textEdit.selectAll();
    }

    public void setFontInfo(Font font1)
    {
        textEdit.setFont(font1);
    }

    public void setCursor()
    {
        textEdit.requestFocus();
    }

    public void indentLine(char c)
    {
        int i = 4;
        try
        {
            i = Integer.parseInt(config.getTabSpace());
        }
        catch(Exception exception)
        {
            i = 4;
        }
        if(c == '}')
        {
            int j = textEdit.getCaretPosition() - 1;
            String s = textEdit.getText();
            String s2 = null;
            if(j >= 0)
                s2 = s.substring(j, j + 1);
            else
                return;
            boolean flag = false;
            int i1 = 0;
            while(j >= 0 && !s2.equals("\n")) 
            {
                if(s2.equals(" "))
                    i1++;
                else
                    flag = true;
                if(--j >= 0)
                    s2 = s.substring(j, j + 1);
            }
            if(!flag && i1 >= i)
            {
                int k = textEdit.getCaretPosition();
                textEdit.select(k - i, k);
                textEdit.replaceSelection("");
            }
        } else
        if(c == '\n')
        {
            int l = textEdit.getCaretPosition() - 1;
            if(l <= 0)
                return;
            String s1 = textEdit.getText();
            String s3 = null;
            s3 = s1.substring(l, l + 1);
            if(!s3.equals("\n"))
                return;
            boolean flag1 = false;
            boolean flag2 = false;
            String s5 = "";
            l--;
            for(String s4 = s1.substring(l, l + 1); l >= 0 && !s4.equals("\n");)
            {
                if(!flag1 && s4.equals("}"))
                    flag2 = true;
                if(s4.equals("{"))
                    flag1 = true;
                s5 = s4 + s5;
                if(--l >= 0)
                    s4 = s1.substring(l, l + 1);
            }

            int j1 = 0;
            for(j1 = 0; j1 < s5.length() && s5.substring(j1, j1 + 1).equals(" "); j1++);
            if(flag1 && !flag2)
                j1 += i;
            String s6 = "";
            for(int k1 = 0; k1 < j1; k1++)
                s6 = s6 + " ";

            textEdit.replaceSelection(s6);
        }
    }

    public void tabToSpace()
    {
        int i = textEdit.getCaretPosition();
        if(i <= 0)
            return;
        int j = 4;
        try
        {
            j = Integer.parseInt(config.getTabSpace());
        }
        catch(Exception exception)
        {
            j = 4;
        }
        i--;
        String s = textEdit.getText();
        if(s.substring(i, i + 1).equals("\t"))
        {
            int k = 0;
            for(int l = i - 1; l >= 0 && !s.substring(l, l + 1).equals("\n");)
            {
                l--;
                k++;
            }

            k = j - k % j;
            String s1 = "";
            for(int i1 = 0; i1 < k; i1++)
                s1 = s1 + " ";

            textEdit.select(i, i + 1);
            textEdit.replaceSelection(s1);
        }
    }

    public void undoableEditHappened(UndoableEditEvent undoableeditevent)
    {
        boolChange = true;
        addEdit(undoableeditevent.getEdit());
        tabToSpace();
    }

    public void keyPressed(KeyEvent keyevent)
    {
    }

    public void keyReleased(KeyEvent keyevent)
    {
    }

    public void keyTyped(KeyEvent keyevent)
    {
        indentLine(keyevent.getKeyChar());
    }

  
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -