23.04.11

이준영·2023년 4월 11일
0

🍡 JTree

트리(계층) 구조 디자인 생성

rootvisible - 루트 안 보이게 함
showRootHandles - 루트도 접을 수 있도록 해줌


JTree는 메서드화 시킬 수 있다.

트리 코드 구조

메서드화 시키기

public DefaultMutableTreeNode makeTree(String rootName) {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootName);
		
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("colors");
		
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("sports");
		
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("foods");
		
		root.add(node1);
		root.add(node2);
		root.add(node3);
		
        //안에 내용 넣기 1
       	DefaultMutableTreeNode leaf1 = new DefaultMutableTreeNode("파랑색");
		DefaultMutableTreeNode leaf2 = new DefaultMutableTreeNode("보라색");
		DefaultMutableTreeNode leaf3 = new DefaultMutableTreeNode("빨간색");
		DefaultMutableTreeNode leaf4 = new DefaultMutableTreeNode("초록색");
		
		node1.add(leaf1);
		node1.add(leaf2);
		node1.add(leaf3);
		node1.add(leaf4);

		//안에 내용 넣기 2		
		node2.add(new DefaultMutableTreeNode("basketball"));
		node2.add(new DefaultMutableTreeNode("football"));
		node2.add(new DefaultMutableTreeNode("soccer"));
		node2.add(new DefaultMutableTreeNode("hockey"));
        
        ...
        DefaultMutableTreeNode leaf1 = new DefaultMutableTreeNode("파랑색");
		DefaultMutableTreeNode leaf2 = new DefaultMutableTreeNode("보라색");
		DefaultMutableTreeNode leaf3 = new DefaultMutableTreeNode("빨간색");
		DefaultMutableTreeNode leaf4 = new DefaultMutableTreeNode("초록색");
		
		node1.add(leaf1);
		node1.add(leaf2);
		node1.add(leaf3);
		node1.add(leaf4);

		
		node2.add(new DefaultMutableTreeNode("basketball"));
		node2.add(new DefaultMutableTreeNode("football"));
		node2.add(new DefaultMutableTreeNode("soccer"));
		node2.add(new DefaultMutableTreeNode("hockey"));
		return root;
	}

1.클릭한 해당 값 배열형식으로 출력하는 코드(접근형식으로 출력)

System.out.println("click : " + tree.getSelectionPath().toString());



🍡 JDialog

서브창 개념의 디자인 (메인 : 프레임 / 서브 : 다이얼로그)
기본적으로 ok / cancel 버튼이 존재한다.


  1. 메인 프레임에서 버튼을 클릭 시 다이얼로그 뜨게 하기

1.메인프레임 생성하고 다이얼로그 생성 후 버튼 이벤트 주기

public void mouseClicked(MouseEvent e) {
				JDialog1 dialog = new JDialog1();
                //닫기 버튼, x누르면 창 닫고 메모리 제거시켜 줌
				dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                
                //창이 여러개 나오는 거 방지(서브창 뜨면 다른 작업 불가)
				dialog.setModal(true);
                
				dialog.setVisible(true);
			}


🍡 좌표, 위치 구하고 조정하기

				Dimension d = JDialogMain1.this.getSize();
				System.out.println(d.toString());
				
				Point p = JDialogMain1.this.getLocation();
				System.out.println(p.toString());
				
				Rectangle r = JDialogMain1.this.getBounds();
				System.out.println(r.toString());
                
                int fx = (int)r.getX();
				int fy = (int)r.getY();
				int fwidth = (int)r.getWidth();
				int fheight = (int)r.getHeight();
				
				int dwidth = 450;
				int dheight = 300;
				
                //실행시 가운데 뜨게 하기(dialog클래스에 setbound 주석하고 하기)
				dialog.setBounds(fwidth/2 - dwidth/2 + fx, fheight/2 - dheight/2 + fy,
						dwidth, dheight);;

getSize = witdh / height
getLocation = x / y 좌표 알려줌
getBounds = 전체 다 알려줌




🍡 이벤트 action => actionPerformed

ok / cancel에다가 이벤트 걸어주고 JDialog1.this.dispose(); 사용하면 버튼 클릭시 창이 닫힌다.

public void actionPerformed(ActionEvent e) {
						JDialog1.this.dispose();
					}



🍡 dialog 실행 구조


public void mouseClicked(MouseEvent e) {
				JDialog2 dialog = new JDialog2();
				System.out.println("1");
				
				dialog.setModal(true);
				System.out.println("2");
				
				
				dialog.setVisible(true);
				System.out.println("3");
}

setModal을 하게되면 프레임이 잠시 멈추고, 창을 닫으면 다시 기동한다.


🍡 응용 : JFrame -> JDialog 전달

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

  1. 다이얼로그 생성 후 text1.getText() 넘겨준다.
public void mouseClicked(MouseEvent e) {
				JDialog2 dialog = new JDialog2(text1.getText());
	
				dialog.setModal(true);
				
				dialog.setVisible(true);
}
		});
  1. this()로 new 생성후 필드멤버에 값 넣고 setText(data)를 하면 text1.gettext한 값이 그대로 textfield에 들어간다.
public class JDialog2 extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private String data;
	private JTextField textField;
	
	
	public JDialog2(String data) {
		this();
		this.data = data;
		
		this.textField.setText(data);
	}


🍡 JDialog => JFrmae 전달

  1. JDialog2 클래스에 getter/ setter 생성
public void setData(String data) {
		this.data = data;
	}


	//getter
	public String getData() {
		return data;
	}
  1. ok 버튼 이벤트 주고 textfield의 값 넘겨주는 코드

JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						JDialog2.this.setData(textField.getText());
						
						JDialog2.this.dispose();
					}
				});
  1. JFrame에서 넘겨진 데이터 받음

JButton btn1 = new JButton("New button");
		btn1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JDialog2 dialog = new JDialog2(text1.getText());
				System.out.println("1");
				
				dialog.setModal(true);
				System.out.println("2");
				
				
				dialog.setVisible(true);
				System.out.println("3");
				
				String data = dialog.getData();
				text2.setText(data);  --> 데이터 넘겨받은 거 쓰기
}
		});

ok 누를 시 text2에 데이터 전달




🍡 응용2 : 첫단 끝단 데이터 전달하여 구구단 실행

  1. JFrame에서 다이얼로그 생성 후 text1과 text2의 gettext를 넘겨줌
public void mouseClicked(MouseEvent e) {
				JDialog1 dialog = new JDialog1(text1.getText(), text2.getText());
				
				dialog.setModal(true);
				
				dialog.setVisible(true);
			}
		});

  1. JDialog1에서 생성자 만들어서 값 넘겨받고 받은 값을 이용하여 구구단 코드짜고 textArea에 출력
public JDialog1(String data1, String data2) {
		this();
		this.data1 = data1;
		this.data2 = data2;
		
		for(int i = Integer.parseInt(data1); i <= Integer.parseInt(data2); i++) {
			for(int j = 1; j <= 9; j++) {
				textArea.append(i + " X " + j + " = " + (i*j));
				textArea.append("\n");
			}
		}
	}




🍡 JColorChooser

사용자가 색을 선택 및 조작할 수 있도록 설계된 컨트롤의 구획을 제공

JColorChooser.showDialog(프레임이름.this, "제목", 초기값색상)

				JColorChooser.showDialog(JColorChooser1.this, "팔레트", Color.RED)

다이얼로그가 가운데에 생김


🍡 클릭한 색 RGB로 표현하기


public void mouseClicked(MouseEvent e) {
				Color color = JColorChooser.showDialog(JColorChooser1.this, "팔레트", Color.BLUE);
                
                //x 누르면 null값 나오므로 조건문 검사 해주기
				if(color != null ) {
                	//각각 RGB형태로 출력해줌 (0 ~ 255)
					System.out.println("RED : " + color.getRed());
					System.out.println("BLUE : " + color.getBlue());
					System.out.println("GREEN : " + color.getGreen());
				}
				else {
					System.out.println("취소 선택");
				}
			}

클릭시 해당 클릭한 색깔의 RGB값 출력




🍡 JFileChooser

파일 탐색기를 띄워서 파일을 선택하거나 내용을 파일로 저장 가능

public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser();
				fileChooser.showOpenDialog(JFileChooser1.this);
			}
		});

기본값은 내 문서이다.


객체 안에 경로를 넣으면 파일 시작 위치를 바꿀 수 있다.

public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("c:\\");
				fileChooser.showOpenDialog(JFileChooser1.this);
			}
		});


변수를 이용하여 파일 선택, 취소시 행동을 결정할 수 있다.
File을 import하고 사용하면 가져오는 파일의 이름(getName) / 경로(path) 등을 메서드를 사용하여 확인 가능하다.


public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("c:\\");
				int result = fileChooser.showOpenDialog(JFileChooser1.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("취소");
				}
			}




🍡 파일 클릭하여 뷰어처럼 보여주기

public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("c:\\");
				int result = fileChooser.showOpenDialog(JFileChooser1.this);
				//파일을 선택하면 반응, 콘솔에 확인 띄워줌
				if(result == JFileChooser.APPROVE_OPTION) {
					System.out.println("확인");
					
					File file = fileChooser.getSelectedFile();
//					System.out.println(file.getName());
//					System.out.println(file.getAbsolutePath());
					
					textArea.setText("");
					
                    //파일 읽기
					BufferedReader br = null;
					
					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 : 확장자 필터링

파일을 추려서 보고 싶을 때 사용

FileNameExtensionFilter("파일 유형 이름", "확장자");
확장자는 두 개 이상도 가능하다


자바 확장자만 화면에 보이게된다.(폴더는 상관 x)



파일 저장 : showSaveDialog

저장할 파일을 지정


bufferedWritter 사용하여 파일 저장

public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser("c:\\");
				
				int result = fileChooser.showSaveDialog(JFileChooser1.this);
				
				File file = fileChooser.getSelectedFile();
				
				if(result == JFileChooser.APPROVE_OPTION) {
					
					//bufferedwriter 이용하여 파일 저장
					BufferedWriter bw = null;
					
					try {
						bw = new BufferedWriter(new FileWriter(file));
						
						bw.write(textArea.getText());
						
						System.out.println("생성 성공");
					}
					 catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} finally {
						if(bw != null) try { bw.close(); } catch(IOException e1) {}
					}
				}
				else {
					System.out.println("성공");
				}
			}


textArea에 적고 저장후 저장한 파일 열기하면 보인다.



이미지 나오게 하기

라벨은 이 코드를 이용하여 이미지를 사용할 수 있다, 버튼 이벤트 줘서 활용가능
lbl.setIcon(new ImageIcon("경로");



JMenubar / JMenu / JMenuitem

3가지 디자인을 활용하여 메뉴를 만들 수 있다, JFrame과 contentPane 사이에 위치( 별도의 메뉴바 자리가 제공)

( 메뉴바 -> 메뉴 -> 메뉴 카테고리(아이템) )


아이템 사이에 사용하여 경계선 만들 수 있다.

mnNewMenu.addSeparator();


메뉴 아이템 안에 체크박스 / 라디오 만들 수 있다.


action 이벤트 적용하여 클릭시 적용하게 할 수 있다. (밑 코드는 출력)

mntmNewMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("새 파일");
			}
		});




profile
끄적끄적

0개의 댓글