πŸ’» κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€

K CΒ·2021λ…„ 8μ›” 10일
0

java

λͺ©λ‘ 보기
4/4

πŸ“Œ GUI μž‘μ„± 절차

  • ν”„λ ˆμž„ μƒμ„±ν•˜κΈ°

import javax.swing.*; 
JFrame a = new JFrame("μ—°μŠ΅"); 
a.setSize(300,200); 
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
a.setVisible(true);​
  • import javax.swing.*;

    πŸ‘‰ μžλ°”μ˜ μŠ€μœ™ ν΄λž˜μŠ€λ“€μ€ 이 νŒ¨ν‚€μ§€ μ•ˆμ— λ“€μ–΄μžˆμ–΄μš”.
    πŸ‘‰ 뒀에 *은 javax.swing νŒ¨ν‚€μ§€μ— μžˆλŠ” λͺ¨λ“  클래슀λ₯Ό μ‚¬μš©ν•˜κ² λ‹¨ μ†Œλ¦¬μ˜ˆμš”.

  • JFrame a = new JFrame("μ—°μŠ΅");

    πŸ‘‰ ν”„λ ˆμž„ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μƒμ„±μžλŠ” νƒ€μ΄ν‹€μ΄μ—μš”.

  • a.setSize(300,200);

    πŸ‘‰ 객체 a ν”„λ ˆμž„μ˜ μ‚¬μ΄μ¦ˆ width = 300, height = 200으둜 μ„€μ •

  • a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    πŸ‘‰ ν”„λ ˆμž„ 창을 μƒλ‹¨μ˜ X λ²„νŠΌμ„ λˆŒλŸ¬μ„œ 껐을 λ•Œ, ν”„λ‘œκ·Έλž¨μ΄ κΊΌμ§‘λ‹ˆλ‹€.

  • a.setVisible(true);

    πŸ‘‰ ν”„λ ˆμž„ 창을 보이게 μ„€μ •ν•©λ‹ˆλ‹€.
    πŸ‘‰ μ•ˆ μ“°λ©΄ μ°½ μ•ˆλ³΄μž„!

πŸ“Œ ν”„λ ˆμž„ 속성 λ³€κ²½ν•˜κΈ°

πŸ‘‰ Object < Component < Container < Window< Frame < JFrame

πŸ“Œ 기초 μ»΄ν¬λ„ŒνŠΈ

πŸ’» ν”„λ ˆμž„(frame)

ν”„λ ˆμž„μ€ μ•žμ—μ„œ μ„€λͺ…ν•œ 바와 같이 메뉴λ₯Ό 뢙일 수 μžˆλŠ” μœˆλ„μš°λ‹€.

πŸ”” μƒμ„±μž

JFrame()

  • μ§€μ •λœ νƒ€μ΄ν‹€μ˜ μƒˆλ‘œμš΄ ν”„λ ˆμž„μ„ λ§Œλ“ λ‹€.

JFrame(String title)

  • 타이틀이 μ—†λŠ” μƒˆλ‘œμš΄ ν”„λ ˆμž„μ„ λ§Œλ“ λ‹€.

πŸ”” λ©”μ„œλ“œ

void add(Component c)

  • μ§€μ •λœ μ»¨ν¬λ„ŒνŠΈμ— ν”„λ ˆμž„μ— μΆ”κ°€ν•œλ‹€.

JMenuBar getJMenuBar()

  • 이 ν”„λ ˆμž„μ— λŒ€ν•œ 메뉴λ₯Ό μ–»λŠ”λ‹€.

void pack()

  • ν”„λ ˆμž„μ„ 크기λ₯Ό μΆ”κ°€ν•œ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ 크기에 λ§žλ„λ‘ μ‘°μ ˆν•œλ‹€.

void remove(Component c)

  • μ§€μ •λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν”„λ ˆμž„μ—μ„œ μ œκ±°ν•œλ‹€.

void setDefaultCloseOperation()

  • μ‚¬μš©μžκ°€ ν”„λ ˆμž„μ„ 닫을 λ•Œ μˆ˜ν–‰λ˜λŠ” λ™μž‘μ„ μ„€μ •ν•œλ‹€.
  • 일반적으둜 JFrame.EXIT_ON_CLOSE둜 μ§€μ •ν•œλ‹€.

void setIconImage(Icon image)

  • ν”„λ ˆμž„μ΄ μ΅œμ†Œν™”λ˜μ—ˆμ„ λ•Œμ˜ μ•„μ΄μ½˜ 지정

void setLayout(LayoutManager layout)

  • ν”„λ ˆμž„μœ„μ— λ†“μ΄λŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ„ λ°°μΉ˜ν•˜λŠ” λ°°μΉ˜κ΄€λ¦¬μž 지정,
  • λ””ν΄νŠΈλŠ” BorderLayout λ°°μΉ˜κ΄€λ¦¬μž

void setLocation(int x, int y)

  • ν”„λ ˆμž„μ˜ xμ’Œν‘œμ™€ yμ’Œν‘œλ₯Ό μ§€μ •ν•œλ‹€.

void setResizeable(boolean value)

  • ν”„λ ˆμž„μ˜ 크기 λ³€κ²½ ν—ˆμš© μ—¬λΆ€

void setSize(int width, int height)

  • ν”„λ ˆμž„μ˜ 크기 μ„€μ •

void setMenuBar(JMenuBar menu)

  • ν˜„μž¬ ν”„λ ˆμž„μ— 메뉴바λ₯Ό 뢙인닀.

πŸ’» νŒ¨λ„(Panel)

μ»΄ν¬λ„ŒνŠΈλ“€μ„ ν¬ν•¨ν•˜κ³  μžˆλ„λ‘ μ„€κ³„λœ μ»¨ν…Œμ΄λ„ˆ μ€‘μ˜ ν•˜λ‚˜μ΄λ‹€. λ ˆμ΄λΈ”μ΄λ‚˜ λ²„νŠΌκ³Ό 같은 μ»΄ν¬λ„ŒνŠΈλ“€μ„ 화면에 ν‘œμ‹œν•˜λŠ” 방법은 νŒ¨λ„μ— 이듀 μ»΄ν¬λ„ŒνŠΈλ₯Ό μΆ”κ°€ν•˜κ³  κ·Έ νŒ¨λ„μ„ ν”„λ ˆμž„μ— μΆ”κ°€ν•˜λŠ” 것이닀. νŒ¨λ„μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ»΄ν¬λ„ŒνŠΈλ₯Ό 직접 μΆ”κ°€ν•  수 μžˆμ§€λ§Œ λ³„λ„μ˜ νŒ¨λ„μ„ μ“°λŠ” 것이 μœ μ§€ 보수 및 배치 관리에 쒋은 κ²½μš°κ°€ λ§Žλ‹€.

πŸ””μƒμ„±μž

JPanel()

  • μƒˆλ‘œμš΄ νŒ¨λ„μ„ μƒμ„±ν•œλ‹€.

JPanel(boolean isDoubleBuffered)

  • λ§Œμ•½ λ§€κ°œλ³€μˆ˜κ°€ 참이면 더블 버퍼링을 μ‚¬μš©ν•œλ‹€.

JPanel(LayoutManager layout)

  • μ§€μ •λœ 배치 κ΄€λ¦¬μžλ₯Ό μ‚¬μš©ν•˜λŠ” νŒ¨λ„μ„ μƒμ„±ν•œλ‹€.

πŸ”” λ©”μ„œλ“œ

void add(Component c)

  • μ§€μ •λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό νŒ¨λ„μ— μΆ”κ°€ν•œλ‹€.

void remove(Component c)

  • μ§€μ •λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό νŒ¨λ„μ—μ„œ μ œκ±°ν•œλ‹€.

void setLayout(Layoutmanager layout)

  • 배치 κ΄€λ¦¬μžλ₯Ό μ§€μ •ν•œλ‹€. λ””ν΄νŠΈλŠ” FlowLayout이닀.

void setLocation(int x, int y)

  • νŒ¨λ„μ˜ μœ„μΉ˜λ₯Ό μ§€μ •ν•œλ‹€.

void setSize(int width, int height)

  • νŒ¨λ„μ˜ 크기λ₯Ό μ§€μ •ν•œλ‹€.
    ###void setToolTipText(String text)
    μ‚¬μš©μžκ°€ 마우슀λ₯Ό νŒ¨λ„μ˜ 빈 곳에 μ˜¬λ €λ†“μœΌλ©΄ νˆ΄νŒμ„ ν‘œμ‹œν•œλ‹€.

νŒ¨λ„μ— μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ν•˜λ €λ©΄ μ—­μ‹œ add() λ©”μ„œλ“œλ₯Ό μ‚¬μš©

Panel panel = new Panel();
panel.add(new Button("μ‹œμž‘"));
panel.add(new Button("μ’…λ£Œ"));

πŸ’» λ ˆμ΄λΈ”

읽기 μ „μš© ν…μŠ€νŠΈλ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•œ μ»΄ν¬λ„ŒνŠΈμ΄λ‹€.

πŸ”” μƒμ„±μž

JLabel()

  • μƒˆλ‘œμš΄ λ ˆμ΄λΈ”μ„ μƒμ„±ν•œλ‹€.

JLabel(String text)

  • μ§€μ •λœ ν…μŠ€νŠΈλ₯Ό ν‘œμ‹œν•˜λŠ” λ ˆμ΄λΈ”μ„ μƒμ„±ν•œλ‹€.

πŸ”” λ©”μ„œλ“œ

String getText()

  • λ ˆμ΄λΈ”μ˜ ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•œλ‹€.

void setText(String text)

  • λ ˆμ΄λΈ”μ˜ ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•œλ‹€.

void setToolTipText(String text)

  • μ‚¬μš©μžκ°€ 마우슀λ₯Ό λ ˆμ΄λΈ” μœ„μ— μ˜¬λ €λ†“μœΌλ©΄ νˆ΄νŒμ„ ν‘œμ‹œν•œλ‹€.

void setVisible(boolean value)

  • λ ˆμ΄λΈ”μ„ 보이게 ν•˜κ±°λ‚˜ κ°μΆ˜λ‹€.

JLabel label = new JLabel("λ°˜κ°‘μŠ΅λ‹ˆλ‹€^^");

  • λ ˆμ΄λΈ” 생성할 λ•Œ ν‘œμ‹œν•  ν…μŠ€νŠΈλ₯Ό μƒμ„±μžμ— λ„˜κΈ΄λ‹€.

λ ˆμ΄λΈ” 객체λ₯Ό μƒμ„±ν•˜κ³  λ‚˜μ€‘μ— λ ˆμ΄λΈ”μ˜ ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•˜λŠ” 방법도 μžˆλ‹€.

JLabel label = new JLabel();
label.setText("λ°˜κ°‘μŠ΅λ‹ˆλ‹€^^");

πŸ“λ ˆμ΄λΈ”κ³Ό λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€μ–΄λ³΄μž.

MyFrameTest3.java
package GUI;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MyFrame5 extends JFrame {
	public MyFrame5() {
		setSize(300, 200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setTitle("MyFrameTest3");
		JPanel panel = new JPanel(); // νŒ¨λ„ 생성
        JLabel label = new JLabel("λ°˜κ°‘μŠ΅λ‹ˆλ‹€."); // λ ˆμ΄λΈ” 생성
        JButton button = new JButton("λ²„νŠΌ"); // λ²„νŠΌ 생성
        panel.add(label); // νŒ¨λ„μ— λ ˆμ΄λΈ” μΆ”κ°€
        panel.add(button); // νŒ¨λ„μ— λ²„νŠΌ μΆ”κ°€
        add(panel); // νŒ¨λ„μ„ ν”„λ ˆμž„μ— μΆ”κ°€
		setVisible(true);
	}
}
public class MyFrameTest3 {
    public static void main(String[] args) {
    MyFrame5 f = new MyFrame5();
	}
}

μ‹€ν–‰κ²°κ³Ό


νŒ¨λ„μ€ μ»¨ν…Œμ΄λ„ˆμ΄λ―€λ‘œ λˆˆμ— λ³΄μ΄λŠ” 뢀뢄은 μ—†λ‹€. νŒ¨λ„μ˜ 배치 κ΄€λ¦¬μžλŠ” λ””ν΄νŠΈκ°€ FlowLayoutμ΄λ―€λ‘œ λ³€κ²½ν•  ν•„μš”κ°€ μ—†λ‹€.

πŸ’» λ²„νŠΌ

μ‚¬μš©μžκ°€ ν΄λ¦­ν–ˆμ„ 경우 이벀트λ₯Ό λ°œμƒν•˜μ—¬ μ›ν•˜λŠ” λ™μž‘μ„ ν•˜κ²Œ ν•˜λŠ”λ° μ΄μš©λœλ‹€. λ²„νŠΌμ—μ„œ λ³€κ²½ κ°€λŠ₯ν•œ 것은 λ²„νŠΌ μ•ˆμ˜ ν…μŠ€νŠΈ, λ²„νŠΌ ν…μŠ€νŠΈμ˜ 폰트, λ²„νŠΌμ˜ 전경색, 배경색, 그리고 λ²„νŠΌμ˜ μƒνƒœ(ν™œμ„±, λΉ„ν™œμ„±)이닀.

πŸ”” μƒμ„±μž

Button()

  • λ ˆμ΄λΈ”μ΄ μ—†λŠ” λ²„νŠΌμ„ μƒμ„±ν•œλ‹€.

BUtton(String label)

  • μ§€μ •λœ λ ˆμ΄λΈ”μ˜ λ²„νŠΌμ„ μƒμ„±ν•œλ‹€.

πŸ”” λ©”μ„œλ“œ

String getText()

  • λ²„νŠΌμ˜ ν˜„μž¬ ν…μŠ€νŠΈλ₯Ό λ°˜ν™˜ν•œλ‹€.

void setText(String text)

  • λ²„νŠΌμ˜ ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•œλ‹€.

void doClick()

  • μ‚¬μš©μžκ°€ λ²„νŠΌμ„ λˆ„λ₯Έκ²ƒμ²˜λŸΌ 이벀트 λ°œμƒμ‹œν‚΄.

void setBorderPainted(boolean value)

  • λ²„νŠΌμ˜ 경계λ₯Ό λ‚˜νƒ€λ‚΄κ±°λ‚˜ κ°μΆ˜λ‹€.

void setContentAreaFilled(boolean value)

  • λ²„νŠΌμ˜ 배경을 μ±„μšΈ 것인지λ₯Ό μ§€μ •ν•œλ‹€.

void setEnabled(boolean value)

  • λ²„νŠΌμ„ ν™œμ„±ν™”ν•˜κ±°λ‚˜ λΉ„ν™œμ„±ν™”ν•œλ‹€.

void setRooloverEnabled(boolean value)

  • λ§ˆμš°μŠ€κ°€ λ²„νŠΌ μœ„μ— 있으면 경계λ₯Ό μ§„ν•˜κ²Œ ν•˜λŠ” λ‘€μ˜€λ²„ 효과λ₯Ό μ„€μ •ν•œλ‹€.

void setToolTipText(String text)

  • μ‚¬μš©μžκ°€ 마우슀λ₯Ό λ²„νŠΌ μœ„μ— μ˜¬λ €λ†“μœΌλ©΄ νˆ΄νŒμ„ ν‘œμ‹œν•œλ‹€.

void setVisible(boolean value)

  • λ²„νŠΌμ„ 보이게 ν•˜κ±°λ‚˜ κ°μΆ˜λ‹€.

3개의 λ²„νŠΌμ„ 가진 ν”„λ ˆμž„ λ§Œλ“€κΈ°.

MyFrameTest4.java
package GUI;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
class MyFrame6 extends JFrame {
	public MyFrame6() {
		setSize(400, 100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setTitle("MyFrameTest4");
		JPanel panel = new JPanel(); // νŒ¨λ„ 생성
		JButton btn1 = new JButton(); // λ²„νŠΌ 생성
        JButton btn2 = new JButton(); 
        JButton btn3 = new JButton();  
//
        btn1.setText("μ™Όμͺ½ λ²„νŠΌ"); // λ²„νŠΌμ˜ ν…μŠ€νŠΈ μ„€μ •
        btn2.setText("κ°€μš΄λ° λ²„νŠΌ");
        btn3.setText("였λ₯Έμͺ½ λ²„νŠΌ"); 
        btn3.setEnabled(false); // μ„Έλ²ˆμ§Έ λ²„νŠΌμ„ λΆˆν™œμ„±μœΌλ‘œ μ„€μ •
        panel.add(btn1); // μ»΄ν¬λ„ŒνŠΈλ₯Ό νŒ¨λ„μ— μΆ”κ°€
        panel.add(btn2);
        panel.add(btn3);
        add(panel); // νŒ¨λ„μ„ ν”„λ ˆμž„μ— μΆ”κ°€
        setVisible(true); // ν”„λ ˆμž„μ„ 화면에 ν‘œμ‹œ
	}
}

0개의 λŒ“κΈ€