본문 바로가기

Today I Learned

자바 GUI 기초 - JFrame, JLabel, JPanel

JFrame

자바 GUI의 최상위 윈도우는 JFrame이다.

사용할 수 있는 속성은 간단하게 아래와 같다.

	public static void main(String[] args) {
		JFrame frame = new JFrame(); //creates a frame
		frame.setSize(420,420); 
		frame.setTitle("JFrame title goes here");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //EXIT OUT
		frame.setResizable(false); //prevent frame from being resized
		
		frame.getContentPane().setBackground(new Color(0x123456)); //change color of background
		
		
//		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); //do not close
		
//		ImageIcon image = new ImageIcon("logo.png"); //create an ImageIcon
//		frame.setIconImage(image.getImage()); //change icon of frame
	
		
		
		frame.setVisible(true); //make frame visible

	}

보통 클래스를 만들고 JFrame을 상속받아서 사용한다. (JFrame 확장의 개념)

public class MyFrame extends JFrame{
	
	MyFrame() {
		this.setSize(420,420); 
		this.setTitle("JFrame title goes here");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //EXIT OUT
		this.setResizable(false); //prevent frame from being resized
		
		this.getContentPane().setBackground(new Color(0x123456)); //change color of background
		
		this.setVisible(true);
	}

JLabel

JLabel는 글자나 이미지를 쓸 수 있는 컴포넌트이다.

객체를 생성하고 프레임에 붙여서(부품을 붙이듯이 부모 객체에 컴포넌트로 등록한다) 사용할 수 있다.

add() 키워드로 부모 객체에게 등록한다.

public class Label {

	public static void main(String[] args) {
		//JLabel = a GUI display area for a string of text, an image, or both
		
		JLabel label = new JLabel("Bro, do you even code?"); //set text of label
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(500, 500);
		frame.setVisible(true);
		
		frame.add(label); //set component

	}

}

 

JLabel이 제공하는 여러가지 메소드를 사용해보자

	public static void main(String[] args) {
		//JLabel = a GUI display area for a string of text, an image, or both
		
		JLabel label = new JLabel();
		ImageIcon pinksea = new ImageIcon("pinksea.png");
		label.setIcon(pinksea);
		label.setText("Bro, do you even code?");
		label.setHorizontalTextPosition(JLabel.CENTER); //set text LEFT, CENTER, RIGHT of ImageIcon
//		label.setVerticalTextPosition(JLabel.TOP); //set text TOP, CENTER, BOTTOM of ImageIcon
		label.setForeground(Color.pink); //set font color of text
		label.setFont(new Font("MV Boli",Font.PLAIN, 20)); //set font of text
		label.setIconTextGap(-25); //set gap of text to image
		label.setBackground(Color.black);
		label.setOpaque(true); //display background color
		
		Border border = BorderFactory.createLineBorder(Color.pink, 10); //border
		label.setBorder(border);
		label.setHorizontalAlignment(JLabel.CENTER); 
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(500, 500);
		frame.setVisible(true);
		
		frame.add(label); //set component

	}

 

JPanel

JPanel은 다른 컴포넌트들을 집어넣을 수 있는 컨테이너 같은 역할을 한다.

최상위 프레임인 JFrame 위에 그림을 그릴 수 있는 도화지를 한장 깐다고 생각하면 된다.

JPanel은 여러개를 생성할 수 있다.

	public static void main(String[] args) {
		
		//JPanel = a GUI component that functions as a container to hold other components
		
		JPanel redPanel = new JPanel();
		redPanel.setBackground(Color.red);
		redPanel.setBounds(0, 0, 250, 250);
		
		JPanel bluePanel = new JPanel();
		bluePanel.setBackground(Color.blue);
		bluePanel.setBounds(250, 0, 250, 250);
		
		JPanel greenPanel = new JPanel();
		greenPanel.setBackground(Color.green);
		greenPanel.setBounds(0, 250, 500, 250);
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(null);
		frame.setSize(750,750);
		
		frame.add(redPanel);
		frame.add(bluePanel);
		frame.add(greenPanel);
		
		frame.setVisible(true);
	}

다른 컴포넌트를 생성해서 패널에 추가할 수 있다.

		//other components
		JLabel label1 = new JLabel("HI");
		JLabel label2 = new JLabel("HELLO");
		ImageIcon image = new ImageIcon("picture.png");
		JLabel label3 = new JLabel(image);
        
        	greenPanel.setLayout(new BorderLayout()); //image의 위치 수정
        
		redPanel.add(label1);
		bluePanel.add(label2);
		greenPanel.add(label3);

*여기서 ImageIcon의 경우 따로 label에 추가를 해줘야한다.