본문 바로가기

웹개발 수업/JAVA

[Day +28]JavaSwing Test / CheckBox, ImageLabel, ComboBox, List, Spinner, Slider, Dialog

210730 금

 

1> CheckBox

package com.kh.chap03_component.view;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class D_CheckBox {

	public void checkBoxTest() {
		
		JFrame frame = new JFrame("CheckBox Test");
		
		//JPanel생성
		JPanel checkPanel = new JPanel();
		JPanel resultPanel = new JPanel();
		
		//check box객체를 여러개 사용하므로 배열로 선언하여 생성
		JCheckBox[] buttons = new JCheckBox[3];
		String[] fruits = {"apple", "banana", "orange"};
		
		//문자열 전달하면서 checkBox 객체 생성 후 바로 패널 위에 올림
		for(int i = 0 ; i < buttons.length ; i++) {
			buttons[i] = new JCheckBox(fruits[i]);
			checkPanel.add(buttons[i]);
		}
		
		
		//결과 문자 JLabel 생성해서 패널에 부착
		JLabel text = new JLabel("선택한 과일이 없습니다.");
		resultPanel.add(text);
		
		
		//여러 개의 체크 박스를 대상으로 이벤트를 작성해야 하므로 반복문 사용
		for(int i = 0 ; i < buttons.length ; i++) {
			//항목이 선택 또는 해제 되었음을 나타내는 ItemEvent의 감지기
			buttons[i].addItemListener(new ItemListener() {

				@Override
				public void itemStateChanged(ItemEvent e) {
					//체크가 되어 있는 체크 박스를 모두 확인하여
					//문자열을 새로 생성하고 라벨에 그 결과를 설정한다
					
					String result = "";
					for(int i = 0 ; i < buttons.length ; i++) {
						//체크박스가 선택 되었는지 확인						
						if(buttons[i].isSelected()) {
							//체크박스가 선택 된 경우 문자열을 result에 저장
							result += buttons[i].getText() + " ";
						}
					}
					
					
					//resultPanel의 JLabel의 값 변경
					if(result.equals("")) {
						text.setText("선택한 과일이 없습니다.");
					}else {
						text.setText(result);
					}
					
				}});
		}
		
		frame.add(checkPanel, "North");
		frame.add(resultPanel, "Center");
		frame.pack();
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	
}

 

 

2> ImageLabel

package com.kh.chap03_component.view;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class E_ImageLabel {

	public void imageLabelTest() {
		
		JFrame frame = new JFrame();
		frame.setSize(250, 300);
		
		//JPanel 생성
		JPanel panel = new JPanel();
		
		//이미지 크기 지정하여 이미지 객체 생성
		Image icon = 
        new ImageIcon("image/user.PNG").getImage().getScaledInstance(150, 150, 0);
		
		//JLabel 생성하여 Image 설정
		JLabel label = new JLabel(new ImageIcon(icon));
		panel.add(label);
		
		//JButton 생성
		JButton button = new JButton("이미지 변경");
		panel.add(button);
		
		
		//버튼 클릭 시 동작하는 이벤트
		button.addActionListener(new ActionListener() {
			int count = 0;

			@Override
			public void actionPerformed(ActionEvent e) {
				String filePath = "";
				if(count % 2 == 0) {
					filePath = "image/dog.PNG";
				}else {
					filePath = "image/user.PNG";
				}
				count++;
				Image icon = 
                new ImageIcon(filePath).getImage().getScaledInstance(150, 150, 0);
				label.setIcon(new ImageIcon(icon));
			}
			
			
		});
		
		
		
		
		frame.add(panel);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}

}

 

3> ComboBox

package com.kh.chap03_component.view;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class F_ComboBox {
	
	public void comboBoxTest() {
		JFrame frame = new JFrame("ComboBox Test");
		frame.setSize(300,200);
		
		//콤보 박스 메뉴 목록을 문자열 배열로 만들고 생성자에 매개 변수로 전달
		String[] animals = {"dog", "cat", "tiger"};
		JComboBox animalList = new JComboBox(animals);
		
		//처음 선택 되어 있을 값을 지정
		animalList.setSelectedIndex(2);
		
		//이미지가 올라갈 JLabel생성
		JLabel label = new JLabel();
		
		//라벨이 가운데 기준으로 수평 졍렬되었으면 좋겠다
		label.setHorizontalAlignment(JLabel.CENTER);

		//콤보 박스 선택이 일어날 때
		animalList.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				//System.out.println(e.getSource());
				//이벤트 발생지
				JComboBox cb = (JComboBox)e.getSource();
				//선택된 아이템이 무엇인지 알아옴
				String name = (String)cb.getSelectedItem();
				//선택된 아이템에 해당하는 사진을 사이즈 조정하여 label에 설정
				Image img = 
                new ImageIcon("image/" + name + ".PNG").getImage().getScaledInstance(150,150,0);
				label.setIcon(new ImageIcon(img));
			}});
		
		
		
		
		
		
		//프레임에 컴포넌트 직접 부착
		frame.add(animalList, "North");
		frame.add(label, "South");
		
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

 

4> List

package com.kh.chap03_component.view;

import java.awt.Dimension;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class G_List {

	public void listTest() {
		JFrame frame = new JFrame();
		frame.setSize(300,200);
		
		
		//JPanel 생성
		JPanel listPanel = new JPanel();
		
		//리스트를 구성할 배열 생성
		String[] cities = {"서울", "대전", "대구", "부산", "경기", "인천", "강원", "제주"};
		//JList 생성(생성자로 String 배열 전달)
		JList<String> list = new JList<>(cities);
		listPanel.add(list);
		
		
		//리스트 선택 모드를 아무것도 설정하지 않으면 복수 선택이 기본값이다
		//선택 모드 1. 단일 선택
		//list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		//선택 모드 2. 복수 선택 모드일 경우(1)
		// 	 단, 인접한 리스트만 선택 가능
		//list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		//선택 모드 3. 복수 선택 모드(2)
		//			인접하지 않은 리스트도 선택 가능
		list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		
		//리스트에 스크롤바 추가
		JScrollPane scroller = new JScrollPane(list);
		//Dimension : 크기를 지정하기 위한 클래스
		//스크롤 패널의 사이즈를 지정하기 위해 Dimension 타입의 객체를 인자로 넣어줘야 함
		scroller.setPreferredSize(new Dimension(200, 100));
		
		//listPanel에 scroller추가
		listPanel.add(scroller);
		
		
		
		//결과 나타낸 resultPanel 생성
		JPanel resultPanel = new JPanel();
		JLabel label = new JLabel("선택 된 항목 : ");
		JTextField selected = new JTextField(10);
		selected.setEditable(false);
		resultPanel.add(label);
		resultPanel.add(selected);
		
		
		//리스트 선택 시 발생하는 이벤트
		list.addListSelectionListener(new ListSelectionListener() {

			@Override
			public void valueChanged(ListSelectionEvent e) {
				//1. 단일 선택 모드일 경우
				//selected.setText(list.getSelectedValue());
				//2. 복수 선택 모드일 경우
				List<String> li = list.getSelectedValuesList();
				String result = "";
				for(int i = 0; i < li.size() ; i++) {
					result += li.get(i) + " ";
				}
				selected.setText(result);
				
			}});
		
		//프레임에 패널 부착
		frame.add(listPanel, "North");
		frame.add(resultPanel, "Center");
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

 

5> Spinner

package com.kh.chap03_component.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;

public class H_Spinner {

   public void spinnerTest() {
      JFrame frame = new JFrame("Spinner Test");
      frame.setSize(500, 100);
      
      // 스피너 올릴 패널/결과 출력 패널 생성
      JPanel panel = new JPanel();
      JPanel resultPanel = new JPanel();
      
      // 1. ListModel : 구성 아이템을 문자열 배열로
      String[] items = {"소설", "잡지", "전공서적", "취미"};
      SpinnerListModel listModel = new SpinnerListModel(items);
      JSpinner spinner1 = new JSpinner(listModel);
      panel.add(spinner1);
      
      // 2. NumberModel : 숫자
      // 생성자에 (시작값, 최소값, 최대값, 증가값) 전달
      SpinnerNumberModel numberModel = new SpinnerNumberModel(1, 0, 9, 1);
      JSpinner spinner2 = new JSpinner(numberModel);
      panel.add(spinner2);
      
      // 3. DateModel : 날짜
      Calendar calendar = Calendar.getInstance();
      Date today = calendar.getTime();            // 현재 날짜
      
      calendar.add(Calendar.YEAR, -50);
      Date start = calendar.getTime();            // 현재 날짜보다 50년 감소한 날짜
      
      calendar.add(Calendar.YEAR, 100);
      Date end = calendar.getTime();               // 현재 날짜보다 50년 증가한 날짜 
                                          // 해당 객체 설정 값이 -50 이여서 +100 처리
      SpinnerDateModel dateModel = new SpinnerDateModel(today, start, end, Calendar.YEAR);
      JSpinner spinner3 = new JSpinner(dateModel);
      spinner3.setEditor(new JSpinner.DateEditor(spinner3, "yyyy/MM/dd"));
      panel.add(spinner3);
      
      // JButton 객체 생성
      JButton button = new JButton("전송");
      panel.add(button);
      
      // resultPanel에 넣을 JLabel 객체 생성
      JLabel text = new JLabel();
      resultPanel.add(text);
      
      // 버튼 클릭 시 발생 이벤트 핸들링
      button.addActionListener(new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent e) {
            // 각 스피너의 현재 값을 가져와서 라벨에 setText
            text.setText(spinner1.getValue() + ", " 
                     + spinner2.getValue() + ", " + spinner3.getValue());
         }
         
      });
      
      // 프레임에 패널 올리기
      frame.add(panel, "North");
      frame.add(resultPanel, "Center");
      
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }

}

 

6> Slider

package com.kh.chap03_component.view;

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class I_Slider {

	public void sliderTest() {
		
		JFrame frame = new JFrame("Slider Test");
		frame.setSize(300,300);
		
		
		//패널 생성 후 라벨 올림
		JPanel panel1 = new JPanel();
		JLabel label = new JLabel("슬라이더를 움직여보세요");
		panel1.add(label);
		
		
		//패널 생성 후 슬라이더와 버튼 올림
		JPanel panel2 = new JPanel();
		//최소, 최대, 현재값
		JSlider slider = new JSlider(0, 30, 15);
		slider.setMajorTickSpacing(10);		//큰 눈금 간격
		slider.setMinorTickSpacing(1);		//작은 눈금 간격
		slider.setPaintTicks(true);			//눈금 표시 기본 값 false
		slider.setPaintLabels(true);		//값을 라벨로 표시 기본값 false
		
		
		
		panel2.add(slider);
		JButton button = new JButton("전송");
		panel2.add(button);
		
		
		//패널 생성 후 결과 라벨 올림
		JPanel panel3 = new JPanel();
		JLabel text = new JLabel("결과 값 : ");
		JLabel result = new JLabel();
		panel3.add(text);
		panel3.add(result);
		
		
		//전송 버튼 이벤트
		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				result.setText(String.valueOf(slider.getValue()));
			}});
		
		
		//프레임에 패널 올림
		frame.add(panel1, "North");
		frame.add(panel2, "Center");
		frame.add(panel3, "South");
		
		
		
		
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

 

7> Dialog

package com.kh.chap03_component.view;

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

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class J_Dialog {

	public void dialogTest() {
		
		JFrame frame = new JFrame("Dialog Test");
		
		JPanel panel = new JPanel();
		JButton button1 = new JButton("Simple Dialog");
		panel.add(button1);
		
		//다이얼로그 설정 값 넣어서 생성
		JDialog dialog = new JDialog(frame, "새로운 창 이름");
		dialog.setBounds(150,250,200,200);
		
		
		//button1 클릭 시 dialog 보이게 처리
		button1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				dialog.setVisible(true);
			}});
		
		
		//dialog에 닫기 버튼 생성하여 올림
		JButton button2 = new JButton("close");
		dialog.add(button2);
		
		//button2 클릭 시 dialog 닫힘
		button2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				dialog.dispose();
			}
			
		});
		
		//패널에 버튼 하나 더 올림
		JButton button3 = new JButton("Input Dialog");
		panel.add(button3);
		
		
		button3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			//1. 입력 다이어로그
				//String result = JOptionPane.showInputDialog("내용을 입력하세요");
				//System.out.println(result);
				//취소 버튼이나 입력 없이 닫히면 null 리턴, 확인 누르면 입력 값 리턴
			
			//2. 확인 다이어로그
				//int result =
					//JOptionPane.showConfirmDialog(null, "확인하시겠습니까?", "확인 창", JOptionPane.YES_NO_OPTION);
				//System.out.println(result);
				//int result =
						//JOptionPane.showConfirmDialog(null, "확인하시겠습니까?", "확인 창", JOptionPane.YES_NO_CANCEL_OPTION);
					//System.out.println(result);
					//y => 0, n => 1, X => -1
					
			//3. 메세지 다이어로그
				JOptionPane.showMessageDialog
                (null, "접근금지", "danger", JOptionPane.ERROR_MESSAGE);
				JOptionPane.showMessageDialog
                (null, "접근금지", "danger", JOptionPane.INFORMATION_MESSAGE);
				JOptionPane.showMessageDialog
                (null, "접근금지", "danger", JOptionPane.PLAIN_MESSAGE);
				JOptionPane.showMessageDialog
                (null, "접근금지", "danger", JOptionPane.QUESTION_MESSAGE);
				JOptionPane.showMessageDialog
                (null, "접근금지", "danger", JOptionPane.WARNING_MESSAGE);

			}});
		
		
		
		
		
		
		
		
		
		frame.add(panel);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}