IT’s Portfolio

[Java] Lecture - Day 11 λ³Έλ¬Έ

Development Study/Java

[Java] Lecture - Day 11

f1r3_r41n 2024. 3. 15. 15:49
728x90
λ°˜μ‘ν˜•

πŸ–₯ Basic Java - Day 11

πŸ‘‰πŸ» [Chapter 08] μžλ°” GUI μŠ€μœ™ 기초

μžλ°”μ˜ GUI(Graphical User Interface)

  • λͺ©μ 
    • 이미지 ν˜Ήμ€ κ·Έλž˜ν”½μ„ μ΄μš©ν•˜μ—¬ 메뉴 등을 ν¬ν•¨ν•œ 화면을 ꡬ성
    • μ‚¬μš©μžλŠ” λ§ˆμš°μŠ€λ‚˜ ν‚€λ³΄λ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ‰½κ²Œ μž…λ ₯
  • νŠΉμ§•
    • κ°•λ ₯ν•œ GUI μ»΄ν¬λ„ŒνŠΈ 제곡
    • μ‰¬μš΄ GUI ν”„λ‘œκ·Έλž˜λ°
  • ν”„λ‘œκ·Έλž˜λ° 방법
    • GUI μ»΄ν¬λ„ŒνŠΈμ™€ κ·Έλž˜ν”½ 이용
      • AWT(java.awt package) νŒ¨ν‚€μ§€μ™€ Swing(javax.swing package) νŒ¨ν‚€μ§€μ— μ œκ³΅λ˜λŠ” λ©”μ»€λ‹ˆμ¦˜ 이용

AWT와 Swing νŒ¨ν‚€μ§€

  • AWT(Abstract Windowing Toolkit)
    • μžλ°”κ°€ 처음 λ‚˜μ™”μ„ λ•Œ ν•¨κ»˜ 배포된 GUI 라이브러리
    • java.awt package
    • AWT μ»΄ν¬λ„ŒνŠΈλŠ” μ€‘λŸ‰ μ»΄ν¬λ„ŒνŠΈ(Heavy weight components)
      • AWT μ»΄ν¬λ„ŒνŠΈλŠ” native(peer) 운영체제의 GUI μ»΄ν¬λ„ŒνŠΈμ˜ 도움을 λ°›μ•„ μž‘λ™
      • μš΄μ˜μ²΄μ œμ— λ§Žμ€ 뢀담을 μ£Όμ§€λ§Œ 처리 μ†λ„λŠ” 빠름
  • Swing
    • AWT κΈ°μˆ μ„ 기반으둜 순수 μžλ°” μ–Έμ–΄λ‘œ λ§Œλ“€μ–΄μ§„ 라이브러리
      • λͺ¨λ“  AWT κΈ°λŠ₯ + μΆ”κ°€λœ κ³ κΈ‰ μ»΄ν¬λ„ŒνŠΈ
      • AWT μ»΄ν¬λ„ŒνŠΈμ— J μžκ°€ 덧뢙여진 μ΄λ¦„μ˜ 클래슀
      • κ·Έ μ™Έ J 자둜 μ‹œμž‘ν•˜λŠ” 클래슀
    • javax.swing package
    • Swing μ»΄ν¬λ„ŒνŠΈλŠ” κ²½λŸ‰ μ»΄ν¬λ„ŒνŠΈ(Light weight components)
      • native(peer) μš΄μ˜μ²΄μ œμ— μ˜μ‘΄ν•˜μ§€ μ•ŠμŒ
    • GUI 라이브러리 계측 ꡬ쑰

Swing 클래슀의 νŠΉμ§•

  • 클래슀 이름이 J 자둜 μ‹œμž‘
  • κ³ κΈ‰ μ»΄ν¬λ„ŒνŠΈλ‘œ μ‰½κ²Œ ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯
  • μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈλŠ” 2가지 μœ ν˜•
    • JComponentλŠ” μƒμ†λ°›λŠ” 클래슀
      • λŒ€λΆ€λΆ„μ˜ μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈ
    • AWT의 Containerλ₯Ό μƒμ†λ°›λŠ” λͺ‡ 개의 클래슀
      • JApplet, JDialog, JFrame λ“±
  • JComponent
    • μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈμ˜ 곡톡적인 속성을 κ΅¬ν˜„ν•œ 좔상 클래슀
      • new JComponent() 처럼 μΈμŠ€ν„΄μŠ€ 생성 λΆˆκ°€λŠ₯
    • AWT의 Componentλ₯Ό μƒμ†λ°›μŒ

μ»¨ν…Œμ΄λ„ˆμ™€ μ»΄ν¬λ„ŒνŠΈ

  • μ»¨ν…Œμ΄λ„ˆ
    • λ‹€λ₯Έ GUI μ»΄ν¬λ„ŒνŠΈλ₯Ό 포함할 수 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈ
    • java.awt.Container 상속
    • λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ— 포함될 수 있음
    • AWT Container
      • Panel, Frame, Applet, Dialog, Window
    • Swing Container
      • JPanel, JFrame, JApplet, JDialog, JWindow
  • μ΅œμƒμœ„ μ»¨ν…Œμ΄λ„ˆ
    • λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ— μ†ν•˜μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ 좜λ ₯ κ°€λŠ₯ν•œ μ»¨ν…Œμ΄λ„ˆ
      • JFrame, JDialog, JApplet
    • λ…λ¦½μ μœΌλ‘œ 좜λ ₯ κ°€λŠ₯ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ œμ™Έν•œ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ“€μ€ μ»¨ν…Œμ΄λ„ˆμ— ν¬ν•¨λ˜μ–΄μ•Ό 화면에 좜λ ₯ κ°€λŠ₯
  • μ»΄ν¬λ„ŒνŠΈ
    • μ»¨ν…Œμ΄λ„ˆμ— ν¬ν•¨λ˜μ–΄μ•Ό 화면에 좜λ ₯될 수 μžˆλŠ” 순수 μ»΄ν¬λ„ŒνŠΈ
    • λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλŠ” java.awt.Componentλ₯Ό μƒμ†λ°›μŒ
    • λͺ¨λ“  μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈλŠ” javax.swing.JComponentλ₯Ό μƒμ†λ°›μŒ

μŠ€μœ™ GUI ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ°

  • μŠ€μœ™ ν”„λ ˆμž„ μž‘μ„± -> main() λ©”μ†Œλ“œ μž‘μ„± -> ν”„λ ˆμž„μ— μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈ 뢙이기
  • μŠ€μœ™ νŒ¨ν‚€μ§€ μ‚¬μš©μ„ μœ„ν•œ import
    • import java.awt.*; : κ·Έλž˜ν”½ 처리λ₯Ό μœ„ν•œ ν΄λž˜μŠ€λ“€μ˜ 경둜λͺ…
    • import java.awt.event.*; : AWT 이벀트 μ‚¬μš©μ„ μœ„ν•œ 경둜λͺ…
    • import javax.swing.*; : μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈ ν΄λž˜μŠ€λ“€μ˜ 경둜λͺ…
    • import javax.swing.event.*; : μŠ€μœ™ 이벀트λ₯Ό μœ„ν•œ 경둜λͺ…
  • μŠ€μœ™ ν”„λ ˆμž„
    • λͺ¨λ“  μŠ€μœ™ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹΄λŠ” μ΅œμƒμœ„ GUI μ»¨ν…Œμ΄λ„ˆ
      • JFrame을 상속받아 κ΅¬ν˜„
      • μ»΄ν¬λ„ŒνŠΈκ°€ 화면에 보이렀면 μŠ€μœ™ ν”„λ ˆμž„μ— λΆ€μ°©λ˜μ–΄μ•Ό 함
      • ν”„λ ˆμž„μ„ λ‹«μœΌλ©΄ ν”„λ ˆμž„ λ‚΄μ˜ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ 보이지 μ•Šκ²Œ 됨
    • μŠ€μœ™ ν”„λ ˆμž„(JFrame) κΈ°λ³Έ ꡬ성
      • ν”„λ ˆμž„ : μŠ€μœ™ ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ν‹€
      • 메뉴바 : 메뉴듀이 λΆ€μ°©λ˜λŠ” 곡간
      • μ»¨ν…νŠΈ 팬 : GUI μ»΄ν¬λ„ŒνŠΈλ“€μ΄ λΆ€μ°©λ˜λŠ” 곡간
import javax.swing.*;

public class MyFrame extends JFrame {
    public MyFrame() {
        setTitle("μŠ€μœ™ ν”„λ ˆμž„ λ§Œλ“€κΈ°");
        setSize(300, 300);
        setVisible(true);
    }

    public static void main(String[] args) {
        MyFrame f = new MyFrame();
    }
}
  • JFrame 클래슀λ₯Ό 상속받은 클래슀 μž‘μ„±
  • ν”„λ ˆμž„μ˜ 크기 λ°˜λ“œμ‹œ 지정 : setSize() 호좜
  • ν”„λ ˆμž„μ„ 화면에 좜λ ₯ν•˜λŠ” μ½”λ“œ λ°˜λ“œμ‹œ ν•„μš” : setVisible(true) 호좜
  • main() λ©”μ†Œλ“œμ˜ μœ„μΉ˜
    • main() λ©”μ†Œλ“œλ₯Ό ν”„λ ˆμž„ 클래슀 λ‚΄μ˜ λ©€λ²„λ‘œ μž‘μ„± <-- ꢌμž₯
    • main() λ©”μ†Œλ“œλ₯Ό 가진 λ‹€λ₯Έ 클래슀 MyApp μž‘μ„±
    • μŠ€μœ™ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ main()의 κΈ°λŠ₯을 μ΅œμ†Œν™”ν•˜λŠ” 것이 λ°”λžŒμ§ν•¨
      • μŠ€μœ™ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” μ‹œμž‘μ μœΌλ‘œμ„œμ˜ κΈ°λŠ₯
      • μŠ€μœ™ ν”„λ ˆμž„μ„ μƒμ„±ν•˜λŠ” μ •λ„μ˜ μ½”λ“œλ‘œ μ΅œμ†Œν™”

ν”„λ ˆμž„μ— μ»΄ν¬λ„ŒνŠΈ 뢙이기

MyFrame() {
    super("title_string");
}

MyFrame() {
    setTitle("title_string");
}
  • 타이틀 달기
    • super() ν˜Ήμ€ setTitle() 이용
public class MyFrame extends JFrame {
    MyFrame() {
        ...
        // ν”„λ ˆμž„μ˜ μ»¨ν…νŠΈ 팬 μ•Œμ•„λ‚΄κΈ°
        Container cP = getContentPane();

        // λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ 생성
        JButton b = new JButton("Click");
        cP.add(b); // μ»¨ν…νŠΈ νŒ¬μ— λ²„νŠΌ λΆ€μ°©
    }
}

class MyPanel extends JPanel {
    ...
    // JPanel을 상속받은 νŒ¨λ„ κ΅¬ν˜„
}
// frame의 μ»¨ν…νŠΈ νŒ¬μ„ MyPanel 객체둜 λ³€κ²½
frame.setContentPane(new MyPanel());
  • μ»¨ν…νŠΈ νŒ¬μ— μ»΄ν¬λ„ŒνŠΈ 달기
    • μ»¨ν…νŠΈ 팬 μ•Œμ•„λ‚΄κΈ°
      • μŠ€μœ™ ν”„λ ˆμž„μ— 뢙은 λ””ν΄νŠΈ μ»¨ν…νŠΈ 팬 μ•Œμ•„λ‚΄κΈ°
    • μ»¨ν…νŠΈ νŒ¬μ— μ»΄ν¬λ„ŒνŠΈ 뢙이기
    • μ»¨ν…νŠΈ 팬 λ³€κ²½
Container c = frame.getContentPane();
c.add(new JButton("Click")); // μ»¨ν…νŠΈ νŒ¬μ— 직접 μ»΄ν¬λ„ŒνŠΈ λΆ€μ°©
  • JDK 1.5 이전
    • ν”„λ ˆμž„μ˜ μ»¨ν…νŠΈ νŒ¬μ„ μ•Œμ•„λ‚΄μ–΄ λ°˜λ“œμ‹œ μ»¨ν…νŠΈ νŒ¬μ— μ»΄ν¬λ„ŒνŠΈ λΆ€μ°©
frame.add(new JButton("Click"));
// ν”„λ ˆμž„μ΄ λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ»¨ν…νŠΈ νŒ¬μ— λŒ€μ‹  λΆ€μ°©
  • JDK 1.5 이후
    • ν”„λ ˆμž„μ— μ»΄ν¬λ„ŒνŠΈλ₯Ό λΆ€μ°©ν•˜λ©΄ ν”„λ ˆμž„μ΄ λŒ€μ‹  μ»¨ν…νŠΈ νŒ¬μ— λΆ€μ°©
  • κ²°λ‘ 
    • JDK 1.5 μ΄μ „μ²˜λŸΌ 직접 μ»¨ν…νŠΈ νŒ¬μ— μ»΄ν¬λ„ŒνŠΈλ₯Ό λΆ€μ°©ν•˜λŠ” 것이 λ°”λžŒμ§
    • μ»¨ν…νŠΈ νŒ¬μ„ λ‹€λ£° 수 μžˆλŠ” λŠ₯λ ₯이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έ
    • μ»΄ν¬λ„ŒνŠΈμ˜ λΆ€λͺ¨κ°€ ν”„λ ˆμž„μ΄ μ•„λ‹Œ, μ»¨ν…νŠΈ νŒ¬μž„μ„ μ•Œκ³  λͺ…ν™•νžˆ μ‚¬μš©ν•  ν•„μš”
import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame {
    public MyFrame() {
        setTitle("Components");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container cP = getContentPane();
        cP.setBackground(Color.ORANGE);
        cP.setLayout(new FlowLayout());

        cP.add(new JButton("OK"));
        cP.add(new JButton("Cancle"));
        cP.add(new JButton("Ignore"));

        setSize(300, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MyFrame();
    }
}
  • μ‘μš© ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ 슀슀둜 μ’…λ£Œ
    • System.exit(0);
    • μ–Έμ œ μ–΄λ””μ„œλ‚˜ 무쑰건 μ’…λ£Œ
  • ν”„λ ˆμž„ μ’…λ£Œ λ²„νŠΌ 클릭 μ‹œ
    • ν”„λ ˆμž„μ„ μ’…λ£Œν•˜μ—¬ ν”„λ ˆμž„ μœˆλ„μš°κ°€ λ‹«νž˜
      • ν”„λ ˆμž„μ΄ ν™”λ©΄μ—μ„œ 보이지 μ•ŠμŒ
    • ν”„λ ˆμž„μ΄ 보이지 μ•Šμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλœ 것이 μ•„λ‹˜
      • ν‚€λ³΄λ“œλ‚˜ 마우슀 μž…λ ₯을 받지 λͺ»ν•¨
      • λ‹€μ‹œ setVisible(true)λ₯Ό ν˜ΈμΆœν•˜λ©΄ 보이게 되고 μ΄μ „μ²˜λŸΌ μž‘λ™ν•¨
  • ν”„λ ˆμž„ μ’…λ£Œ λ²„νŠΌμ΄ 클릭될 λ•Œ ν”„λ ˆμž„μ„ λ‹«κ³  μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ„λ‘ ν•˜λŠ” 방법
    • frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

main() μ’…λ£Œ 뒀에도 ν”„λ ˆμž„μ΄ μ‚΄μ•„μžˆλŠ” 이유

  • μŠ€μœ™ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μƒμ„±λ˜λŠ” μŠ€λ ˆλ“œ
    • 메인 μŠ€λ ˆλ“œ
      • main()을 μ‹€ν–‰ν•˜λŠ” μŠ€λ ˆλ“œ
      • μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ‹œμž‘ν•œ μŠ€λ ˆλ“œ
    • 이벀트 처리(λΆ„λ°°) μŠ€λ ˆλ“œ
      • μŠ€μœ™ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ μžλ™μœΌλ‘œ μ‹€ν–‰λ˜λŠ” μŠ€λ ˆλ“œ
      • 이벀트 처리(λΆ„λ°°) μŠ€λ ˆλ“œμ˜ μ—­ν• 
        • GUI ν™”λ©΄ 그리기
        • ν‚€λ‚˜ 마우슀 μž…λ ₯을 λ°›μ•„ 이벀트λ₯Ό μ²˜λ¦¬ν•  μ½”λ“œ 호좜
  • μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ’…λ£Œ 쑰건
    • μ‹€ν–‰ 쀑인 μ‚¬μš©μž μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜λ„ 없을 λ•Œ μ’…λ£Œ
  • 즉, 메인 μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜μ–΄λ„ 이벀트 처리(λΆ„λ°°) μŠ€λ ˆλ“œκ°€ μ‚΄μ•„ μžˆμ–΄ ν”„λ ˆμž„ 화면을 그리고 λ§ˆμš°μŠ€λ‚˜ ν‚€ μž…λ ₯을 λ°›κΈ° λ•Œλ¬Έμ— ν”„λ ˆμž„μ΄ μ‚΄μ•„μžˆμŒ

μ»¨ν…Œμ΄λ„ˆμ™€ 배치 κ°œλ…

  • μ»¨ν…Œμ΄λ„ˆλ§ˆλ‹€ ν•˜λ‚˜μ˜ 배치 κ΄€λ¦¬μžκ°€ μ‘΄μž¬ν•˜λ©°, μ‚½μž…λ˜λŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ˜ μœ„μΉ˜μ™€ 크기λ₯Ό κ²°μ •ν•˜κ³  적절히 λ°°μΉ˜ν•¨
  • μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 λ³€ν•˜λ©΄ λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ μœ„μΉ˜μ™€ 크기λ₯Ό λͺ¨λ‘ μž¬μ‘°μ •ν•˜κ³  μž¬λ°°μΉ˜ν•¨

  • 배치 κ΄€λ¦¬μž λŒ€ν‘œ μœ ν˜•

μ»¨ν…Œμ΄λ„ˆμ™€ 배치 κ΄€λ¦¬μž

  • μ»¨ν…Œμ΄λ„ˆμ˜ λ””ν΄νŠΈ 배치 κ΄€λ¦¬μž
    • μ»¨ν…Œμ΄λ„ˆλŠ” 생성 μ‹œ λ””ν΄νŠΈ 배치 κ΄€λ¦¬μž μ„€μ •
// JPanel νŒ¨λ„μ— BorderLayout 배치 κ΄€λ¦¬μž μ„€μ •
JPanel p = new JPanel();
p.setLayout(new BorderLayout());

// μ»¨ν…νŠΈ 팬의 배치 κ΄€λ¦¬μžλ₯Ό FlowLayout으둜 λ³€κ²½
Container c = frame.getConentPane();
c.setLayout(new FlowLayout());
c.setLayout(FlowLayout); // 였λ₯˜ μ½”λ“œ
  • μ»¨ν…Œμ΄λ„ˆμ— μƒˆλ‘œμš΄ 배치 κ΄€λ¦¬μž μ„€μ •

FlowLayout

  • μ»¨ν…Œμ΄λ„ˆ 곡간 내에 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ 배치
    • λ‹€μ‹œ μœ„μ—μ„œ μ•„λž˜λ‘œ μˆœμ„œλŒ€λ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ°°μΉ˜ν•¨
  • μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 λ³€ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈ 재배치
FlowLayout()
FlowLayout(int align)
FlowLayout(int align, int hGap, int vGap)
  • μƒμ„±μž
    • align : μ»΄ν¬λ„ŒνŠΈμ˜ μ •λ ¬ 방법
      • μ™Όμͺ½ μ •λ ¬(FlowLayout.LEFT)
      • 였λ₯Έμͺ½ μ •λ ¬(FlowLayout.RIGHT)
      • default : 쀑앙 μ •λ ¬(FlowLayout.CENTER)
    • hGap : 쒌우 μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ μˆ˜ν‰ 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 5
    • vGap : μƒν•˜ μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ 수직 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 5

BorderLayout

  • μ»¨ν…Œμ΄λ„ˆ 곡간을 5 κ΅¬μ—­μœΌλ‘œ λΆ„ν• , 배치
    • East, West, South, North, Center
  • 배치 방법 : add(Component comp, int index)
    • comp : μ»¨ν…Œμ΄λ„ˆμ— μ‚½μž…λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ
    • index : μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜
      • BorderLayout.EAST(동)
      • BorderLayout.WEST(μ„œ)
      • BorderLayout.SOUTH(남)
      • BorderLayout.NORTH(뢁)
      • BorderLayout.CENTER(쀑앙)
  • μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 λ³€ν•˜λ©΄ 재배치
BorderLayout()
BorderLayout(int hGap, int vGap)
  • μƒμ„±μž
    • hGap : 쒌우 두 μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ μˆ˜ν‰ 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 0
    • vGap : μƒν•˜ 두 μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ 수직 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 0

GridLayout

container.setLayout(new GridLayout(4, 3, 5, 5));
container.add(new JButton("1"));
container.add(new JButton("2"));
// 4x3 κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒ μ„€μ •
// 총 11개의 λ²„νŠΌμ΄ μˆœμ„œλŒ€λ‘œ add 됨
// 수직 간격 vGap : 5 pixel
// μˆ˜ν‰ 간격 hGap : 5 pixel
  • μ»¨ν…Œμ΄λ„ˆ 곡간을 λ™μΌν•œ μ‚¬κ°ν˜• 격자(κ·Έλ¦¬λ“œ)둜 λΆ„ν• ν•˜κ³  각 셀에 ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈ 배치
    • 격자 ꡬ성은 μƒμ„±μžμ— ν–‰μˆ˜μ™€ μ—΄μˆ˜ 지정
    • 셀에 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ, λ‹€μ‹œ μœ„μ—μ„œ μ•„λž˜λ‘œ μˆœμ„œλŒ€λ‘œ 배치
  • μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 λ³€ν•˜λ©΄ 재배치
    • 크기 μž¬μ‘°μ •
GridLayout()
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hGap, int vGap)
  • μƒμ„±μž
    • rows : κ·Έλ¦¬λ“œμ˜ ν–‰ 수
      • default : 1
    • cols : κ·Έλ¦¬λ“œμ˜ μ—΄ 수
      • default : 1
    • hGap : 쒌우 μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ μˆ˜ν‰ 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 0
    • vGap : μƒν•˜ μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ 수직 간격(ν”½μ…€ λ‹¨μœ„)
      • default : 0

배치 κ΄€λ¦¬μž μ—†λŠ” μ»¨ν…Œμ΄λ„ˆ

  • 배치 κ΄€λ¦¬μžκ°€ μ—†λŠ” μ»¨ν…ŒμΈλ„ˆλž€?
    • μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ»΄ν¬λ„ŒνŠΈμ˜ μ ˆλŒ€ 크기와 μ ˆλŒ€ μœ„μΉ˜ κ²°μ •
  • μš©λ„
    • μ»΄ν¬λ„ŒνŠΈμ˜ ν¬κΈ°λ‚˜ μœ„μΉ˜λ₯Ό 개발자 μž„μ˜λ‘œ κ²°μ •ν•˜κ³ μž ν•˜λŠ” 경우
    • κ²Œμž„ ν”„λ‘œκ·Έλž¨κ³Ό 같이 μ‹œκ°„μ΄λ‚˜ 마우슀/ν‚€λ³΄λ“œ μž…λ ₯에 따라 μ»΄ν¬λ„ŒνŠΈλ“€μ˜ μœ„μΉ˜μ™€ 크기가 μˆ˜μ‹œλ‘œ λ³€ν•˜λŠ” 경우
    • μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ μ„œλ‘œ 겹쳐 좜λ ₯ν•˜κ³ μž ν•˜λŠ” 경우
  • μ»¨ν…Œμ΄λ„ˆμ˜ 배치 κ΄€λ¦¬μž 제거 방법
    • container.setLayout(null);
    • μ»¨ν…Œμ΄λ„ˆμ˜ 배치 κ΄€λ¦¬μžκ°€ 없어지면, μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ μ–΄λ–€ λ°°μΉ˜λ„ μ—†μŒ
      • μΆ”κ°€λœ μ»΄ν¬λ„ŒνŠΈμ˜ 크기가 0으둜 μ„€μ •, μœ„μΉ˜λŠ” μ˜ˆμΈ‘ν•  수 μ—†κ²Œ 됨
  • μ»΄ν¬λ„ŒνŠΈμ˜ μ ˆλŒ€ 크기와 μ ˆλŒ€ μœ„μΉ˜ μ„€μ •
    • ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ 이루어져야 함
    • μ»΄ν¬λ„ŒνŠΈ 크기 μ„€μ •
      • component.setSize(int width, int height);
    • μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ μ„€μ •
      • component.setLocation(int x, int y);
    • μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜μ™€ 크기 λ™μ‹œ μ„€μ •
      • component.setBounds(int x, int y, int width, int height);
728x90
λ°˜μ‘ν˜•

'Development Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] Lecture - Day 13  (1) 2024.03.30
[Java] Lecture - Day 12  (0) 2024.03.22
[Java] Lecture - Day 10  (0) 2023.12.12
[Java] Lecture - Day 9  (1) 2023.12.12
[Java] Lecture - Day 8  (0) 2023.12.12
Comments