'text edit'에 해당되는 글 1건

  1. 2016.12.23 Text Edit

Text Edit

응용 SoftWare/JAVA 2016. 12. 23. 17:34

import java.awt.Component;

import java.awt.ScrollPane;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import javax.swing.DefaultListModel;

import javax.swing.ImageIcon;

import javax.swing.JDesktopPane;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JScrollPane;

import javax.swing.JSplitPane;

import javax.swing.JTextArea;

import javax.swing.JTree;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import javax.swing.event.TreeExpansionEvent;

import javax.swing.event.TreeWillExpandListener;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.DefaultTreeCellRenderer;

import javax.swing.tree.TreeNode;

import javax.swing.tree.TreePath;


public class TextEdit extends JFrame implements ActionListener, TreeWillExpandListener{

//Menu

JMenuBar mb = new JMenuBar();

JMenu fileMenu = new JMenu("파일");

JMenuItem newMenuItem = new JMenuItem("새문서");

JMenuItem openMenuItem = new JMenuItem("열기");

JMenuItem saveMenuItem = new JMenuItem("저장");

JMenuItem endMenuItem = new JMenuItem("종료");

//Menu End

//Left

JSplitPane verticalSplit;

JScrollPane treeScroll, listScroll;

JTree tree;

DefaultMutableTreeNode root;

File file; //JTree에서 선택한 폴더를 저장할 변수

JList list;

DefaultListModel<String> listModel = new DefaultListModel<String>();

//Left end

//Right

JSplitPane horizontalSplit;

JDesktopPane dp = new JDesktopPane();

//Right end

int docNum = 1;

public TextEdit() {

super("편집기");

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

//menu

mb.add(fileMenu);

fileMenu.add(newMenuItem);

fileMenu.add(openMenuItem);

fileMenu.add(saveMenuItem);

fileMenu.add(endMenuItem);

setJMenuBar(mb);

newMenuItem.addActionListener(this);

openMenuItem.addActionListener(this);

saveMenuItem.addActionListener(this);

endMenuItem.addActionListener(this);

//menu end

//Left

root = new DefaultMutableTreeNode("내컴퓨터");

makeDir(); //drive 만들기

tree = new JTree(root, true);

treeScroll = new JScrollPane(tree);

tree.setCellRenderer(new FileRenderer());

tree.addTreeWillExpandListener(this); //JTree 이벤트 등록

list = new JList();

listScroll = new JScrollPane(list);

list.setModel(listModel);

//MouseEvent

MyMouseEvent me = new MyMouseEvent();

list.addMouseListener(me);

//MouseEvent end

verticalSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treeScroll, listScroll);

verticalSplit.setDividerLocation(200);

//Left end

//right

horizontalSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, verticalSplit, dp);

//right end

add(horizontalSplit, "Center");

setSize(800, 700);

setVisible(true);

}

//오버라이딩

public void actionPerformed(ActionEvent ae){

String eventStr = ae.getActionCommand();

if(eventStr.equals("새문서")){

newDocument();

}else if(eventStr.equals("열기")){

openFile();

}else if(eventStr.equals("저장")){

saveFile();

}else if(eventStr.equals("종료")){

dispose();

System.exit(0);

}

}

public void treeWillExpand(TreeExpansionEvent te){ //폴더 확장 시 호출

TreePath tPath = te.getPath();

DefaultMutableTreeNode node = (DefaultMutableTreeNode)tPath.getLastPathComponent();

Object obj = node.getUserObject(); //

if(obj instanceof File){

file = (File)obj;

if(file.isDirectory()){ //JTree에서 구한 File 객체가 폴더면

File[] f = file.listFiles();//하위 폴더와 파일 목록 구하기

listModel.removeAllElements();//JList 초기화

for(int i=0; i<f.length; i++){

if(f[i].isDirectory() && !f[i].isHidden()){ //폴더인 경우

DefaultMutableTreeNode insertNode = new DefaultMutableTreeNode(f[i]);

node.add(insertNode);

}else if(f[i].isFile() && !f[i].isHidden()){ //파일인 경우

listModel.addElement(f[i].getName());

}

}

list.setModel(listModel);

}

}

}

public void treeWillCollapse(TreeExpansionEvent te){}

//FileRenderer

class FileRenderer extends DefaultTreeCellRenderer

{

public ImageIcon IconDirectory = new ImageIcon("image/icon.jpg");

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)

{

        File file;

            if ((value instanceof DefaultMutableTreeNode) && (((DefaultMutableTreeNode)value).getUserObject() instanceof File)) 

              JLabel label;

                file = (File)((DefaultMutableTreeNode)value).getUserObject(); 

            String fname = file.getName();

                if ( fname.length() <= 0 ) 

                label = (JLabel) super.getTreeCellRendererComponent(tree, file.getPath(), selected, expanded, leaf, row, hasFocus);

else

                label = (JLabel) super.getTreeCellRendererComponent(tree, fname, selected, expanded, leaf, row, hasFocus);

                

           if (file.isFile() == false) 

            label.setIcon(IconDirectory);

           return label;

        return super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);

}

}

//MouseEvent 내부 클래스

class MyMouseEvent extends MouseAdapter{

public void mouseClicked(MouseEvent me){

if(me.getClickCount()==2){ //더블클릭

String filename = (String)list.getSelectedValue();

createInternalFrame(new File(file, filename));

}

}

}

//새문서

public void newDocument(){

JInternalFrame jif = new JInternalFrame("새문서"+docNum++, true, true, true, true);

JTextArea ta = new JTextArea();

JScrollPane sp = new JScrollPane(ta);

jif.add(sp);

jif.setBounds(docNum*20, docNum*20, 400, 400);

jif.setVisible(true);

dp.add(jif);

try{

jif.setSelected(true);

}catch(Exception e){

System.out.println(e.getMessage());

}

}

//열기

public void openFile(){

JFileChooser fc = new JFileChooser();

int chooser = fc.showOpenDialog(this);

if(chooser==0){ //열기

File f = fc.getSelectedFile();

createInternalFrame(f);

}

}

//저장하기

public void saveFile(){

JFileChooser fc = new JFileChooser();

int status = fc.showSaveDialog(this);

if(status==0){ //저장

File f = fc.getSelectedFile();

JInternalFrame jif = dp.getSelectedFrame();

JTextArea ta = (JTextArea)jif.getFocusOwner();

try{

FileWriter fw = new FileWriter(f);

String writeStr = ta.getText();

fw.write(writeStr, 0, writeStr.length());

fw.flush();

}catch(Exception e){

System.out.println(e.getMessage());

}

}

}

//인터널 프레임 생성

public void createInternalFrame(File file){

JInternalFrame jif = new JInternalFrame(file.getPath(), true, true, true, true);

JTextArea ta = new JTextArea();

JScrollPane sp = new JScrollPane(ta);

jif.add(sp);

jif.setSize(500, 500);

jif.setVisible(true);

dp.add(jif);

try{

jif.setSelected(true); //창 앞으로 출력

//io

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

while(true){

String readLine = br.readLine();

if(readLine==null){break;}

ta.append(readLine+"\n");

}

}catch(Exception e){

System.out.println(e.getMessage());

}

}

//드라이브 만들기

public void makeDir(){

try{

File dir[] = File.listRoots();

DefaultMutableTreeNode node;

for(int i=0; i<dir.length; i++){

node = new DefaultMutableTreeNode(dir[i]);

root.add(node);

}

}catch(Exception e){System.out.println(e.getMessage());}

}

public static void main(String[] args) {

new TextEdit();


}


}



'응용 SoftWare > JAVA' 카테고리의 다른 글

URL Test  (0) 2016.12.23
InetAddress Test  (0) 2016.12.23
Thread Test 2  (0) 2016.12.23
Thread Test 1  (0) 2016.12.23
Class Test  (0) 2016.12.23
Posted by Hyun CHO
,