본문 바로가기
인턴

[인턴 OJT 9일차] Java Swing

by 리잼 2022. 12. 23.
반응형

 

가운데에 프레임을 띄우는 공식

x = 화면해상도 (scr) - width/2

y = scr - height/2

하지만 setLocationRelativeTo(null); 을 쓰면 자동으로 화면을 맞춰준다

 

필드 작명법

네이밍 할때는 소문자로 시작해서 _필드이름 으로 작성하여 가독성을 높힐 수 있도록 한다.

화면구성

 

Swing 컴포넌트 실습

종류
설명
BorderLayout
JFrame의 기본 레이아웃으로 컴포넌트들을 상,하,좌,우,중앙 으로 배치한다.
FlowLayout
컴포넌트들을 왼쪽에서 오른쪽으로 일렬로 배치한다. 컨테이너 크기를 넘어서면 자동으로 아래로 배치한다. 생성자로 정렬방식을 지정해줄 수 있다.
GridLayout
컴포넌트들을 행과 열로 배치한다.
컴포넌트의 크기는 컨테이너의 크기에 자동으로 맞춰진다.
GridBagLayout
컴포넌트들을 행과 열로 배치한다.
각 영역을 서로 다른 크기로 지정해 줄 수 있다.
BoxLayout
행이나 열 방향으로 일렬로 배치한다.
가로 또는 세로로 배치하며 프레임의 끝을 만나도 줄바꿈을 하지 않는다.
CardLayout
한 화면에 여러 컨테이너들을 겹쳐 슬라이드 처럼 사용한다.
하나의 프레임으로 여러 화면을 보여주고 싶을 때 사용한다.
GroupLayout
컨테이너를 순차적 배열과 병렬 배열로 나누고 두개를 결합하여 컴포넌트들을 그룹화한다(?).
SpringLayout
컴포넌트에 "스프링"을 연결해준다. 컴포넌트들은 다른 컴포넌트를 기준으로 배치된다.

BorderLayout

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class BorderLayoutTest extends JFrame {
	
	BorderLayoutTest() {
		// BorderLayout은 기본 설정이라 따로 선언하지 않아도 된다.
		//setLayout(new BorderLayout());
		setSize(500,500);
		
		JButton btns[] = new JButton[5]; // 5개의 버튼 리스트 생성
		
		for (int i = 0; i < btns.length; i++) {
			btns[i] = new JButton("버튼" + (i+1));
		}
		
		// 상, 하, 좌, 우, 중앙 배치
		add(btns[0], BorderLayout.EAST);
		add(btns[1], BorderLayout.WEST);
		add(btns[2], BorderLayout.SOUTH);
		add(btns[3], BorderLayout.NORTH);
		add(btns[4], BorderLayout.CENTER);
		
		setDefaultCloseOperation(EXIT_ON_CLOSE); // 창을 닫으면 자동으로 프로세스 종료
		setLocationRelativeTo(null);  			  // 창을 가운데에 띄우는 메소드
	}
	
	
	public static void main(String[] args) {

		new BorderLayoutTest().setVisible(true);
		
	}

}
 

FlowLayout

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowLayoutTest extends JFrame {

	FlowLayoutTest() {
		setTitle("FlowLayout");
		setLayout(new FlowLayout(FlowLayout.CENTER, 15, 15));
		// new FlowLayout(int align,int hgap,int vgap) 생성자로 정렬기준 뿐만 아니라 상하좌우 간격도 지정 가능
		setSize(500,500);
		
		JButton btns[] = new JButton[5]; // 5개의 버튼 리스트 생성
		
		for (int i = 0; i < btns.length; i++) {
			btns[i] = new JButton("버튼" + (i+1));
		}
		
		add(btns[0]);
		add(btns[1]);
		add(btns[2]);
		add(btns[3]);
		add(btns[4]);
		
		setDefaultCloseOperation(EXIT_ON_CLOSE); // 창을 닫으면 자동으로 프로세스 종료
		setLocationRelativeTo(null);  			  // 창을 가운데에 띄우는 메소드
	}
	
	public static void main(String[] args) {

		new FlowLayoutTest().setVisible(true);
		
	}

}
 

GridLayout

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GridLayoutTest extends JFrame{

	GridLayoutTest() {
		setTitle("GridLayout");
		setLayout(new GridLayout(3,3)); // 행과 열이 3 X 3 
		setSize(500,500);

		JButton btns[] = new JButton[9]; // 9개의 버튼 리스트 생성
		
		for (int i = 0; i < btns.length; i++) {
			btns[i] = new JButton("버튼" + (i+1));
		}
		
		add(btns[0]);
		add(btns[1]);
		add(btns[2]);
		add(btns[3]);
		add(btns[4]);
		add(btns[5]);
		add(btns[6]);
		add(btns[7]);
		add(btns[8]);
		
		setDefaultCloseOperation(EXIT_ON_CLOSE); // 창을 닫으면 자동으로 프로세스 종료
		setLocationRelativeTo(null);  			  // 창을 가운데에 띄우는 메소드
	}
	
	public static void main(String[] args) {
		new GridLayoutTest().setVisible(true);
				
	}

}
 

주소록 실습

라벨, 텍스트 박스 위치 설정

jPanel_Left.add(jLabel_Name, new GridBagConstraints(0, 0, 1, 1,
				1.0, 0.0,
				GridBagConstraints.CENTER, GridBagConstraints.BOTH,
				new Insets(5, 5, 5, 5),
				0, 0));
		jPanel_Left.add(jTextField_Name, new GridBagConstraints(1, 0, 1, 1,
				1.0, 0.0,
				GridBagConstraints.CENTER, GridBagConstraints.BOTH,
				new Insets(5, 5, 5, 5),
				0, 0));
		
		jPanel_Left.add(jLabel_Name, new GridBagConstraints(0, 0, 1, 1,
				1.0, 0.0,
				GridBagConstraints.CENTER, GridBagConstraints.BOTH,
				new Insets(5, 5, 5, 5),
				0, 0));
		jPanel_Left.add(jTextField_Name, new GridBagConstraints(1, 0, 1, 1,
				1.0, 0.0,
				GridBagConstraints.CENTER, GridBagConstraints.BOTH,
				new Insets(5, 5, 5, 5),
				0, 0));
.
.
.                        생략
.
.
 
 

DB와 화면에 출력될 데이터들 값은 일치해야 한다

 

설정한 데이터 가져오기

	private void initData() {
		
		List<AddressBookVo> addressBooklist = new ArrayList<>();

		Vector dataList = new Vector<>();
		
		try (SqlSession session = sqlSessionFactory.openSession()) {
			AddressBookDao mapper = session.getMapper(AddressBookDao.class);
			
				addressBooklist = mapper.selectAddressBookList(new AddressBookVo());
			
			for (AddressBookVo s : addressBooklist) {
				LOGGER.info("onePerson" + s);
				Vector data = new Vector();
				data.add(s.getSeqNum());
				data.add(s.getName());
				data.add(s.getBirthday());
				data.add(s.getGender());
				data.add(s.getPhoneNumber());
				data.add(s.getAddress());
				
				dataList.add(data);
			}
			
			tableModel.setData(dataList); //값을 불러와서 common 화면에 넣어준다
			tableModel.fireTableDataChanged(); // fireTableDataChanged 을 호출하면 테이블 전체에 변경된 데이터가 반영된다
			
		} catch (Exception ex) {
			LOGGER.debug(ex.getMessage(), ex);
		}
		
	}
 
반응형