JAVA

Sep2_프레임창 화면 중앙에 위치시키기(AWT, JFrame)

장꾸꾸 2020. 9. 3. 10:09

실행시킬 메인 클래스

package main;

import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Main {

	public static void main(String[] args) {
		// TODO 창이 화면의 정중앙에 오도록 하기!(해상도크기와 상관없이)
		new Control().init();
	}

}

 

컨트롤 클래스

2가지 방법으로 해봄

1st : (스크린창 - 프레임창)/2 이용

2nd : JFrame 사용 setLocationRelativeTo(null); 메서드 이용

package main;

import java.awt.BorderLayout; //2nd 방법
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame; // 2nd 방법
import javax.swing.JLabel;

public class Control {

	public void init() {
		Dimension scr = Toolkit.getDefaultToolkit().getScreenSize(); 
//		System.out.println(scr.width+":"+scr.height); //해상도 보여주기
		Frame frame = new Frame("1st AWT");
		frame.setSize(200,200); //프레임창 크기 정하기
		Dimension frameSize=frame.getSize();//프레임창 크기를 디멘션으로
//1st 방법 모니터와 자바 프레임 길이를 뺀 뒤 1/2하는 방법
		frame.setLocation((scr.width-frameSize.width)/2,(scr.height-frameSize.height)/2); //프레임창 위치 정하기
		frame.setResizable(false); //?
		setLayout(frame);//밑에서 메소드로 가져옴
		frame.setVisible(true);

//2nd 방법 java.awt.Window에 있는 setLocationRelativeTo 메서드 활용		
		JFrame frame2 = new JFrame();
		frame2.setSize(300,300);
		//프레임 위치 설정
		frame2.setLocationRelativeTo(null);
		//레이블 생성
		JLabel label = new JLabel("2nd 방법",JLabel.CENTER);
		//레이블을 프레임에 추가
		frame2.add(label, BorderLayout.CENTER);
		frame2.setVisible(true);
	}
	private void setLayout(Frame frame) {
		frame.addWindowListener(new WindowListener() {//밑에는 ctrl+스페이스바 자동생성
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Closed말고 여기에 창닫기 표시
				System.exit(0);
				
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
			
		}
	}