트리(계층) 구조 디자인 생성
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());
서브창 개념의 디자인 (메인 : 프레임 / 서브 : 다이얼로그)
기본적으로 ok / cancel 버튼이 존재한다.
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 = 전체 다 알려줌
ok / cancel에다가 이벤트 걸어주고 JDialog1.this.dispose(); 사용하면 버튼 클릭시 창이 닫힌다.
public void actionPerformed(ActionEvent e) {
JDialog1.this.dispose();
}
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 => 생성자, setter
JDialog -> JFrame => getter , 멤버필드
public void mouseClicked(MouseEvent e) {
JDialog2 dialog = new JDialog2(text1.getText());
dialog.setModal(true);
dialog.setVisible(true);
}
});
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);
}
public void setData(String data) {
this.data = data;
}
//getter
public String getData() {
return data;
}
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog2.this.setData(textField.getText());
JDialog2.this.dispose();
}
});
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에 데이터 전달
public void mouseClicked(MouseEvent e) {
JDialog1 dialog = new JDialog1(text1.getText(), text2.getText());
dialog.setModal(true);
dialog.setVisible(true);
}
});
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.showDialog(프레임이름.this, "제목", 초기값색상)
JColorChooser.showDialog(JColorChooser1.this, "팔레트", Color.RED)
다이얼로그가 가운데에 생김
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값 출력
파일 탐색기를 띄워서 파일을 선택하거나 내용을 파일로 저장 가능
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("파일 유형 이름", "확장자");
확장자는 두 개 이상도 가능하다
자바 확장자만 화면에 보이게된다.(폴더는 상관 x)
저장할 파일을 지정
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("경로");
3가지 디자인을 활용하여 메뉴를 만들 수 있다, JFrame과 contentPane 사이에 위치( 별도의 메뉴바 자리가 제공)
( 메뉴바 -> 메뉴 -> 메뉴 카테고리(아이템) )
아이템 사이에 사용하여 경계선 만들 수 있다.
mnNewMenu.addSeparator();
메뉴 아이템 안에 체크박스 / 라디오 만들 수 있다.
action 이벤트 적용하여 클릭시 적용하게 할 수 있다. (밑 코드는 출력)
mntmNewMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("새 파일");
}
});