view src/main/java/christie/textEditor/textFrame.java @ 224:0c74d9168aff

fix Editor & trans
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Tue, 24 Dec 2019 19:33:50 +0900
parents 1c37472fc00d
children 218ad6b9ba87
line wrap: on
line source

package christie.textEditor;

import christie.codegear.CodeGear;
import christie.remotingTextEditor.SetInstance;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;

import static javax.swing.UIManager.put;


public class TextFrame extends JInternalFrame {
    private JTextArea textArea;

    private static String DEFAULT_CHARACTER_CODE = "Shift_JIS";

    public int loc = 0;

    public boolean send = false;

    private int sendLoc = 0;

    public boolean canWrite = true;

    StyleContext sc = new StyleContext();

    public TextFrame() {
        this("新規テキスト");
    }

    public TextFrame(String title) {
        //JInternalFrameのコンストラクタの呼び出しを実行
        super(title, true, true, true, true);
        //サイズの指定
        this.setSize(800, 600);
        // JTextArea(テキスト入力のコンポーネントを追加する。)
        textArea = new JTextArea();

        textArea.getDocument().addDocumentListener(new MyDocumentListener());

        //textArea.getDocument().putProperty("name", "Text Area");
        this.add(textArea);
    }


    public TextFrame(File file) throws IOException {
        this(file.getName());
        this.openFile(file);
    }

    void openFile(File file) throws IOException {
        FileInputStream fiStream = null;
        ByteArrayOutputStream baoStream = null;
        try {
            fiStream = new FileInputStream(file);
            System.out.print(fiStream);
            baoStream = new ByteArrayOutputStream();
            System.out.print(baoStream);
            //読み込みデータ格納用配列
            byte[] byteData = new byte[1];
            int ret = fiStream.read(byteData);
            //ファイルの最後まで繰り返す。
            while (ret != -1) {
                baoStream.write(byteData);
                ret = fiStream.read(byteData);
            }
            //バイト配列を文字列に変換、重い。
            String text = new String(baoStream.toByteArray(), DEFAULT_CHARACTER_CODE);
            //テキストGUIに読み込んだファイルの内容を設定
            textArea.setText(text);
            //タイトルを開いたファイル名へ変更
            this.setTitle(file.getName());
        } finally {
            if (fiStream != null) {
                fiStream.close();
            }
            if (baoStream != null) {
                baoStream.close();
            }
        }
    }

    public void insertText(){
        textArea.insert("send", 0);
    }

    public boolean SendPermission(){
        return send;
    }

    public void changeToFalseSend(){
        send = false;
    }

    public int returnOffset(){
        return sendLoc;
    }



    public class MyDocumentListener implements DocumentListener {
        public void insertUpdate(DocumentEvent e) {
            if(canWrite == true) {
                Document doc = e.getDocument();
                loc = e.getOffset();
                sendLoc = loc;

                //System.out.println("location = "  + loc);
                try {
                    System.out.print("string = " + doc.getText(loc, 1) + "\n");
                } catch (BadLocationException e1){
                    e1.printStackTrace();
                }
                send = true;

                /*
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            canWrite = false;
                            doc.insertString(0, "kakikomi", sc.getStyle(StyleContext.DEFAULT_STYLE));
                            canWrite = true;
                            //System.out.print("string = " + doc.getText(loc, 1) + "\n");
                        } catch (BadLocationException e1) {
                            e1.printStackTrace();
                        }
                    }
                });
                */

            }
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            Document doc = e.getDocument();
            int loc = e.getOffset();
            int e_length = e.getLength();
            int del_loc_end = loc + e_length - 1;
            if (e_length == 1) {
                System.out.println("delete " + loc);
            } else {
                System.out.println("delete " + loc + " to " + del_loc_end);
            }


            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        doc.insertString(0, "kakikomi", sc.getStyle(StyleContext.DEFAULT_STYLE));
                        //System.out.print("string = " + doc.getText(loc, 1) + "\n");
                    } catch (BadLocationException e1) {
                        e1.printStackTrace();
                    }
                }
            });
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }

    }



    public static void StartEditor(){
        MainFrame mainFrame = MainFrame.getInstance();
        mainFrame.setVisible(true);
    }
}