Swing - JTree / JDialog

준동이·2023년 4월 11일
0
post-thumbnail

JTree

제일 최상위는 루트라고 한다.
JTree = 루트
show root handle 루트를 접고 펴기 할 수있다.
rootvisible 누르면 분리됨.
트리는 윈도우빌더에서 버그가 있어서 마지막에 코드가 망가져있거나 문제가 생길때가 있어서 제일 마지막에 해주는것도 좋음.



모델 눌러서 이름 변경할 수 있음



클릭시 클릭한 값 출력

마우스 클릭 이벤트 -> 코드입력
tree.getSelectionPath().toString()
tree.getSelectionPath() : 선택된 최초의 노드의 패스를 돌려준다.

tree = new JTree();
		tree.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println("click" + tree.getSelectionPath().toString());
			}
		});

JTree의 colors의 클릭한 목록 출력



주석처리한 복잡한 코드를 분해해서 쉽게 쓰기 / 노드에 값은 넣지않았음.

트리 모델에 집어넣기

tree.setShowsRootHandles(true);
		
		/* 주석처리
		tree.setModel(new DefaultTreeModel(
			new DefaultMutableTreeNode("JTree") {
				{
					DefaultMutableTreeNode node_1;
					node_1 = new DefaultMutableTreeNode("colors");
						node_1.add(new DefaultMutableTreeNode("파랑색"));
						node_1.add(new DefaultMutableTreeNode("보라색"));
						node_1.add(new DefaultMutableTreeNode("노란색"));
						node_1.add(new DefaultMutableTreeNode("빨간색"));
					add(node_1);
					node_1 = new DefaultMutableTreeNode("sports");
						node_1.add(new DefaultMutableTreeNode("basketball"));
						node_1.add(new DefaultMutableTreeNode("soccer"));
						node_1.add(new DefaultMutableTreeNode("football"));
						node_1.add(new DefaultMutableTreeNode("hockey"));
						add(node_1);
					node_1 = new DefaultMutableTreeNode("food");
						node_1.add(new DefaultMutableTreeNode("hot dogs"));
						node_1.add(new DefaultMutableTreeNode("pizza"));
						node_1.add(new DefaultMutableTreeNode("ravioli"));
						node_1.add(new DefaultMutableTreeNode("bananas"));
						add(node_1);
				}
			}
		));
		*/
        
		// 메서드 부르기
        // DefaultTreeModel : TreeNodes를 사용하는 단순 트리 데이터 모델
		tree.setModel(new DefaultTreeModel(makeTree("root")));
		
		scrollPane.setViewportView(tree);
	}
	
    // 위의 코드를 쉽게 쓰기
    // DefaultMutableTreeNode : 트리의 데이터 표현을 위해 사용됨 / TreeNode 인터페이스를 구현한 클래스
    // 트리의 각 노드를 표현하기위해 TreeNode 인터페이스를 사용
	public DefaultMutableTreeNode makeTree(String rootName) {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootName);
		
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("colors");
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("sports");
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("food");
		
        // leaf11 ~
        
		root.add(node1);
		root.add(node2);
		root.add(node3);
		
		return root;
	}

노드만 있고 안에 값은 없음



위의 노드에 값 넣기

	public DefaultMutableTreeNode makeTree(String rootName) {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootName);
		
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("colors");
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("sports");
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("food");
		
		// leafl에 선언 후 값 집어넣고 노드에 추가하기
		DefaultMutableTreeNode leafl1 = new DefaultMutableTreeNode("파랑색");
		DefaultMutableTreeNode leafl2 = new DefaultMutableTreeNode("보라색");
		DefaultMutableTreeNode leafl3 = new DefaultMutableTreeNode("노란색");
		DefaultMutableTreeNode leafl4 = new DefaultMutableTreeNode("빨간색");
	
		// 노드에 붙이기 필수
		node1.add(leafl1);
		node1.add(leafl2);
		node1.add(leafl3);
		node1.add(leafl4);
		
		// 더 간단하게, 노드에 바로 값 집어넣어버리기
		node2.add(new DefaultMutableTreeNode("basketball"));
		node2.add(new DefaultMutableTreeNode("soccer"));
		node2.add(new DefaultMutableTreeNode("football"));
		node2.add(new DefaultMutableTreeNode("hockey"));
		
		
		root.add(node1);
		root.add(node2);
		root.add(node3);
		
		return root;
	}



메인화면에 서브창(JDialog)만들기

종속적으로 만들어줘야한다.

버튼 누르면 다이올로그 띄우기

JFrame 클래스를 생성하여 버튼 하나 만들고,
JDialog 클래스 만듦



JDialog 디자인은 아예 버튼이 제공되어져있다.
contentPanel과 buttonPane부분



가장 기본적인 동작은 JDialog의 밑의 코드부분이다.

JDialogEx01 dialog = new JDialogEx01();
			
            // DISPOSE_ON_CLOSE : 창 닫기(한 개의 창만)
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            
            // 다이올로그 창 띄우기
			dialog.setVisible(true);



JDialog 만들어보기

JFrame클래스의 버튼에 이벤트 주고
JDialogEx01 dialog = JDialogEx01(); 로 객체를 생성해주고
dialog.setVisible(true); 로 다이올로그 창을 띄운다.

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
            
            	// 다이올로그 객체 생성 해줘야한다.
				JDialogEx01 dialog = new JDialogEx01();
				
				// dialog 보여주기
				dialog.setVisible(true);
			}
		});

버튼 누를때마다 열린다 / 그래서 따로 설정이 필요하다.



창 닫기 메서드의 차이

dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)는
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)와 비슷하지만
서로 종료시키는것의 차이가 있다.

DISPOSE_ON_CLOSE : 이 메서드는 현재 프레임을 닫는 데 사용된다.
그러나 응용 프로그램을 종료하지 않는다.

EXIT_ON_CLOSE : 이 메소드는 모든 프레임을 닫고 마지막으로 어플리케이션을 종료하기 위해 사용된다.

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JDialogEx01 dialog = new JDialogEx01();
				
				// EXIT_ON_CLOSE 는 프로그램이 종료이고 DISPOSE_ON_CLOSE 는 내 창만 종료시키는 기능
				// 창을 닫고 메모리에 저장시킴
				// 버튼이아닌, 다이올로그에서도 적용시켜도 된다.
				dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				
				// dialog 보여주기
				dialog.setVisible(true);
			}
		});



창 여러 개 말고 하나만 띄우게 하기 - dialog.setModal(true)

dialog.setVisible(true)보다 먼저 선언이 돼있어야 적용이 된다.

창이 하나 띄워지면 띄워진 창 하나 말고는 클릭이 안된다.

// dialog.setVisible(true)보다 먼저 선언이 돼있어야 적용이 된다.
dialog.setModal(true);



창을 띄우면 바깥창의 중앙에 띄우게 하기

Rectangle 사용
Rectangle은 Rectangle 객체의 좌표 공간에서의 좌상의 점 (x, y) 및 그 폭과 높이에 의해 둘러싸이는 좌표 공간내의 영역을 지정

왼쪽 위에 자동적으로 띄워지는것을 중앙으로 띄워지게 하기
다이올로그의 setbound(위치)를 수정

수정 전



수정 후
Rectangle은 Rectangle 객체의 좌표 공간에서의 좌상의 점 (x, y) 및 그 폭과 높이에 의해 둘러싸이는 좌표 공간내의 영역을 지정

x, y좌표로 중앙으로 띄우게 함

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JDialogEx01 dialog = new JDialogEx01();
				
				dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				
				/*
				// width, height 나옴
				Dimension d = JDialogMainEx01.this.getSize();
				System.out.println(d.toString());
				
				// x, y 좌표값 나옴
				Point p = JDialogMainEx01.this.getLocation();
				System.out.println(p.toString());
				*/
				
				// JDialogMainEx01.this.getBounds()의 좌표와 크기의 정보를 줌
				Rectangle r = JDialogMainEx01.this.getBounds();
				System.out.println(r.toString());
				
				// 창 바깥창 중앙에 띄우기
				
				// x좌표
				int fx = (int)r.getX();
				// y좌표
				int fy = (int)r.getY();
				
				int fwidth = (int)r.getWidth();
				int fheight = (int)r.getHeight();
				
				int dwidth = 450;
				int dheight = 300;
				
				dialog.setBounds(fwidth/2 - dwidth/2 + fx, fheight/2 - dheight/2 + fy, dwidth, dheight);
				
				// 창 하나만 띄우고 다른곳 클릭 안되게 함
				dialog.setModal(true);
				
				// dialog 보여주기
				dialog.setVisible(true);
			}
		});

System.out.println(r.toString()); 으로 출력



다이올로그에서 버튼 누르면 닫히게 하기

다이올로그의 OK, Cancel버튼 이벤트 -> 액션 -> 액션퍼폼

// 닫기기능
JDialogEx01.this.dispose();
JPanel buttonPane = new JPanel();
			buttonPane.setBounds(0, 228, 434, 33);
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane);
			{
				JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						// 익명 내부클래스이기때문에 ActionListner의 외부클래스명인 JDialogEx01.this로 명시해줘야한다.
						// 익명 내부클래스이기때문에 this만 쓰면 안된다.
						JDialogEx01.this.dispose();
					}
				});
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						JDialogEx01.this.dispose();
					}
				});



메인에서 이벤트주고 다이올로그 띄우기

JFrame -> JDialog => 생성자, setter
JDialog -> JFrame => getter / 멤버필드

이런식으로 입/출력되게 하기 (데이터 주고 받기)



modal이 true면 버튼 눌렀을때 visible은 실행이 안되고 창을 닫을 때 실행이 된다.

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JDialogEx02 dialog = new JDialogEx02();
				
				System.out.println("1");
				
				// modal이 진행되면 비져블 하는 순간에 프레임의 제어권이 다이올로그로 넘어오면서 프레임이 멈춘다.
				// modal이 true면 실행될때 visible에서 멈춘다.
				// false면 비져블도 실행됨.
				dialog.setModal(true);
				System.out.println("2");
				
				dialog.setVisible(true);
				System.out.println("3");
				
				// 1. JFrame -> JDialog로 가는 과정
				// 2. JDialog -> JFrame으로 가는 과정
			}
		});

버튼 누르면 1,2 만 출력, 닫기 누르면 visible코드 실행돼서 3 출력이 된다.



프레임에서 다이올로그로 집어넣을 때

생성자, setter
다이올로그 클래스

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 매개변수가 있는 생성자 호출함
//				JDialogEx02 dialog = new JDialogEx02("데이터");
				JDialogEx02 dialog = new JDialogEx02(textField1.getText());
				
				System.out.println("1");
				
				dialog.setModal(true);
				System.out.println("2");
				
				dialog.setVisible(true);
				System.out.println("3");
				
				// 1. JFrame -> JDialog로 가는 과정
				// 2. JDialog -> JFrame으로 가는 과정
			}
		});



다이올로그에서 프레임으로 -> getter / 멤버필드
다이올로그 클래스

JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {

						JDialogEx02.this.setData(textField.getText());
		
						JDialogEx02.this.dispose();
					}
				});

JFrame 클래스

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 매개변수가 있는 생성자 호출함
//				JDialogEx02 dialog = new JDialogEx02("데이터");
				JDialogEx02 dialog = new JDialogEx02(textField1.getText());

				System.out.println("1");

				dialog.setModal(true);
				System.out.println("2");

				dialog.setVisible(true);
				System.out.println("3");

				String data = dialog.getData();
				System.out.println("결과 : " + data);
				
				textField2.setText(data);

			}
		});



완성된 JFram 클래스와 JDialog 클래스 (위의 코드들의 종합본)
JDialogMain클래스(JFrame)

import java.awt.EventQueue;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class JDialogMainEx02 extends JFrame {

	private JPanel contentPane;
	private JTextField textField1;
	private JTextField textField2;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JDialogMainEx02 frame = new JDialogMainEx02();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JDialogMainEx02() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 800, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);

		textField1 = new JTextField();
		textField1.setBounds(12, 10, 194, 21);
		contentPane.add(textField1);
		textField1.setColumns(10);

		JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 매개변수가 있는 생성자 호출함
//				JDialogEx02 dialog = new JDialogEx02("데이터");
				JDialogEx02 dialog = new JDialogEx02(textField1.getText());

				System.out.println("1");

				dialog.setModal(true);
				System.out.println("2");

				dialog.setVisible(true);
				System.out.println("3");

				String data = dialog.getData();
				System.out.println("결과 : " + data);
				
				textField2.setText(data);

			}
		});
		btn.setBounds(218, 9, 97, 23);
		contentPane.add(btn);

		textField2 = new JTextField();
		textField2.setBounds(12, 41, 303, 21);
		contentPane.add(textField2);
		textField2.setColumns(10);
	}
}



JDialog 다이올로그 클래스(JDialog)

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class JDialogEx02 extends JDialog {

	private final JPanel contentPanel = new JPanel();

	// 공용데이터 생성
	private String data;
	private JTextField textField;

	// setter
	public void setData(String data) {
		this.data = data;
	}

	// getter
	public String getData() {
		return data;
	}

	/**
	 * Create the dialog.
	 */

	// 생성자를 이용하여 캡슐화에 접근
	public JDialogEx02(String data) {
		this();
		this.data = data;

//		System.out.println(data);

		this.textField.setText(data);
	}

	public JDialogEx02() {

		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		{
			textField = new JTextField();
			textField.setBounds(12, 10, 182, 21);
			contentPanel.add(textField);
			textField.setColumns(10);
		}
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {

						JDialogEx02.this.setData(textField.getText());
		
						JDialogEx02.this.dispose();
					}
				});
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						JDialogEx02.this.dispose();
						
					}
				});
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}

}




문제 - 구구단 다이올로그로 출력하기

선택기 (chooser) - 색상 / 파일 / 이미지

색상 선택기

버튼생성 -> 마우스 이벤트

JButton btn1 = new JButton("New button");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JColorChooser.showDialog(JColorChooserEx01.this, "팔레트", Color.RED);
			}
		});



컬러 객체 생성하여 선택한 색상 선택시 출력

x 닫기 누르면 null

JButton btn1 = new JButton("New button");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				Color color = JColorChooser.showDialog(JColorChooserEx01.this, "팔레트", Color.RED);
				System.out.println("결과 : " + color);
			}
		});

선택한 색상에대한 rgb 정보 출력



색의 특성/ rgb의 정보

JButton btn1 = new JButton("New button");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				Color color = JColorChooser.showDialog(JColorChooserEx01.this, "팔레트", Color.RED);
//				System.out.println("결과 : " + color);
				
				// 색 특성
				if(color != null) {
					System.out.println("RED : " + color.getRed());
					System.out.println("Blue : " + color.getBlue());
					System.out.println("Green : " + color.getGreen());
				} else {
					System.out.println("취소 선택");
				} 
				
			}
		});



파일chooser

파일의 위치를 가져옴
JFileChooser 객체 생성 -> 객체변수.showOpenDialog(JFileChooserEx01.this)로
파일 열기
내문서가 디폴트임

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser();
				fileChooser.showOpenDialog(JFileChooserEx01.this);
			}
		});



특정 디렉토리 열기

이렇게 열릴 위치를 정해줄 수 있다.

JFileChooser fileChooser = new JFileChooser("C:\\");



확인, 취소 눌렀는 지 확인 / 파일 객체를 활용하여 파일명, 디렉토리명, 그외의 파일 정보들 가져오기

JButton btn = new JButton("New button");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("C:\\");
                
                // showOpen과 showSave가 있는데 save는 말 그대로 저장하는 것. Open은 보여주는 것
                
                /* 
                파일이 열리거나 저장이 되면 으로 0이 반환되는데,
                0을 result에 담고 result와 APPROVE_OPTION(상수 0) 이 일치하면
                잘 열리거나 저장이 됐다는것을 의미한다는 조건을 걸음
                취소버튼을 누르면 CANCEL_OPTION이 반환된다.
                */
				int result = fileChooser.showOpenDialog(JFileChooserEx01.this);
				if(result == JFileChooser.APPROVE_OPTION) {
					System.out.println("확인");
					
					// 파일명이나 디렉토리명 가져오기
					// 파일 객체를 사용하여 정보를 가져오기 
					File file = fileChooser.getSelectedFile();
					System.out.println(file.getName());
					System.out.println(file.getAbsolutePath());
					
				} else if(result == JFileChooser.CANCEL_OPTION) {
					System.out.println("취소");
				}
			
			}
		});

취소 누르면 취소 출력
확인 누르면 확인 출력
파일 누르고 확인 누르면 파일 정보 출력



list 보고싶으면 - File 객체 / IO를 보고싶으면 - Stream객체 사용

list - File객체

JButton btn = new JButton("파일 열기");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("C:\\");
				int result = fileChooser.showOpenDialog(JFileChooserEx01.this);
				if(result == JFileChooser.APPROVE_OPTION) {
					System.out.println("확인");
					
					File file = fileChooser.getSelectedFile();

					
					BufferedReader br = null;
					
					textArea.setText("");
					try {
						br = new BufferedReader(new FileReader(file));
						String line = null;
						while((line = br.readLine()) != null) {
							textArea.append(line + System.lineSeparator());
						}
					} catch (FileNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} finally {
						if(br != null) try {br.close();} catch(IOException e1) {}
					}
					
				} else if(result == JFileChooser.CANCEL_OPTION) {
					System.out.println("취소");
				}
			
			}
		});
        

선택한 파일의 내용을 볼 수 있다.



모든파일 말고 특정 파일만 보게 필터링 하기

// FileNameExtensionFilter : file 확장자 필터링 
// setFileFilter() : 파일필터 지정
FileNameExtensionFilter filter = new FileNameExtensionFilter("Java 소스", "Java", "txt");
fileChooser.setFileFilter(filter);



저장방식 (저장할 파일을 지정)

버튼생성 -> 마우스클릭 이벤트

btn2 = new JButton("파일 저장");
		btn2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("C:\\");
				int result = fileChooser.showSaveDialog(JFileChooserEx01.this);
				
				if(result == JFileChooser.APPROVE_OPTION) {
					
					System.out.println("확인" + fileChooser.getSelectedFile().getName());
					System.out.println("확인" + fileChooser.getSelectedFile().getAbsolutePath());
				} else {
					System.out.println("취소");
				}
			}
		});

아직은 실제로 저장하지는 않았지만 저장이 잘 실행됐다고 뜸



실제로 저장하기

btn2 = new JButton("파일 저장");
		btn2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("C:\\");
				int result = fileChooser.showSaveDialog(JFileChooserEx01.this);
				
				if(result == JFileChooser.APPROVE_OPTION) {
					// getSelectedFile() : 선택한 파일의 경로 반환
                    // getAbsolutePath() : File에 입력된 절대 경로 리턴
					System.out.println("확인" + fileChooser.getSelectedFile().getName());
					System.out.println("확인" + fileChooser.getSelectedFile().getAbsolutePath());
					
					BufferedWriter bw = null;
					
					try {
						bw = new BufferedWriter(new FileWriter(fileChooser.getSelectedFile()));
						bw.write(textArea.getText());
						
//						JOptionPane.showInternalMessageDialog(JFileChooserEx01.this, "내용 저장",
//								"저장", JOptionPane.INFORMATION_MESSAGE);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					
							
				} else {
					System.out.println("취소");
				}
			}
		});

Hello World가 적힌 텍스트파일을 html폴더에 저장하여 파일 생성된거 확인

파일 열기에서 html폴더의 Hello.txt파일을 선택 후 열기 누르면 Hello World 출력된다



버튼누르면 이미지 넣기

JButton btn = new JButton("이미지 보기");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("c:\\");
                /*
                FileNameExtensionFilter("파일 유형에 대한 값", "폴더에 있는 파일 유형 값");
                만약 파일유형에 대한 값이 png고 폴더에 있는 파일 유형 값이 jpg라면
                폴더유형을 png로 선택했을 때 나오는 폴더는 jpg폴더들이 나온다
                그래서 두 개를 다 같은걸로 해줘야 한다.
                */
				FileNameExtensionFilter filter1 = new FileNameExtensionFilter("JPG", "jpg");
				FileNameExtensionFilter filter2 = new FileNameExtensionFilter("PNG", "png");
                
                // setFileFilter(사용하는 새로운 현재의 파일 필터) : 현재의 파일 필터를 설정
				fileChooser.setFileFilter(filter1);
				fileChooser.setFileFilter(filter2);
				
				int result = fileChooser.showOpenDialog(JFileChooserEx02.this);
				if(result == JFileChooser.APPROVE_OPTION) {
					File file = fileChooser.getSelectedFile();
					
					lbl.setIcon(new ImageIcon(file.getAbsolutePath()));
				} else if (result == JFileChooser.CANCEL_OPTION) {
					System.out.println("취소");
				}
			}
		});



메뉴

상단의 메뉴 만들기



밑에 줄 생성

mnNewMenu.addSeparator();



체크박스 생성



상단의 메뉴 누르면 출력시키기

JMenuItem mntmNewMenuItem = new JMenuItem("New");
		mntmNewMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("새파일");
			}
			
		});
		mnNewMenu.add(mntmNewMenuItem);
		
		JMenuItem mntmNewMenuItem_1 = new JMenuItem("Open");
		mntmNewMenuItem_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("열기");
			}
		});

profile
개발자 꿈나무

0개의 댓글