๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study/Java

์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ 6์ฃผ์ฐจ ์ •๋ฆฌ

์ˆ˜์—…๋‚ ์งœ/์ •๋ฆฌ๋‚ ์งœ

2022.04.12/2022.04.16

 

ํ•™์Šต์ฃผ์ œ
  • 08 GUI

 

ํ•™์Šต๋‚ด์šฉ

08 GUI

- 3๊ฐ€์ง€ ๋ฐฐ์น˜๊ด€๋ฆฌ์ž์™€ 1๊ฐ€์ง€ ๋ฐฐ์น˜๋ฐฉ์‹(๋ฐฐ์น˜๊ด€๋ฆฌ์ž ์‚ฌ์šฉx)

 

๋ฐฐ์น˜๊ด€๋ฆฌ์ž(Layout manager)

  • ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ž๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด
  • ์ ˆ๋Œ€ ์œ„์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ฐฐ์น˜๋  ๊ฒฝ์šฐ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜๋„ํ•œ ๋ฐ”์™€๋Š” ๋‹ค๋ฅธ๊ฒŒ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์น˜๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ํ™”ํ•œ๋‹ค.

 

FlowLayout

  • ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ๋ฐฉ๋ฒ•: ์ค‘์•™ ์ •๋ ฌ
  • ํŒจ๋„๊ณผ ์• ํ”Œ๋ฆฟ์˜ ๋””ํดํŠธ ๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž
  • setComponentOrientation() / applyComponentOrientation() ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์น˜ ๋ฐฉํ–ฅ์„ ์„ค์ •ํ•œ๋‹ค.
  • → ์˜ˆ) panel.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

 

FlowLayout ํด๋ž˜์Šค[์ฐธ๊ณ ]

์ƒ์„ฑ์ž ์„ค๋ช…
FlowLayout() ๊ธฐ๋ณธ ์„ค์ •: ์ค‘์•™ ๋ฐฐ์น˜, ๊ฐ„๊ฒฉ(๊ฐ€๋กœ, ์„ธ๋กœ): ๊ฐ๊ฐ 5ํ”ฝ์…€
FlowLayout(int align) ์ •๋ ฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š”,
FlowLayout.LEADING (์™ผ์ชฝ ์ •๋ ฌ)
FlowLayout.CENTER (์ค‘์•™ ์ •๋ ฌ)
FlowLayout.TRAILING (์˜ค๋ฅธ์ชฝ ์ •๋ ฌ)
๊ธฐ๋ณธ ์„ค์ •: ์ค‘์•™ ๋ฐฐ์น˜, ๊ฐ„๊ฒฉ(๊ฐ€๋กœ, ์„ธ๋กœ): ๊ฐ๊ฐ 5ํ”ฝ์…€
FlowLayout(int align, int hgap, int vgap) ์ •๋ ฌ ๋ฐฉ์‹, ์ˆ˜ํ‰ ๊ฐ„๊ฒฉ(hgap), ์ˆ˜์ง ๊ฐ„๊ฒฉ(vgap)
๋”๋ณด๊ธฐ
  • LEADING, CENTER, TRAILING ์€ ์ƒ์ˆ˜
  • ์™ผ์ชฝ, ์ค‘์•™, ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ์€ ๊ฐ๊ฐ 0, 1, 2 ์ธ๋ฐ ์ˆซ์ž ๋Œ€์‹  ์ƒ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

BorderLayout

  • 5๊ฐœ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ ์˜์—ญ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค. (์ƒ, ํ•˜, ์ขŒ, ์šฐ, ์ค‘์•™)
  • ํ”„๋ ˆ์ž„์˜ ๋””ํดํŠธ ๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž
  • BorderLayout์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ ์‹œ, ์˜์—ญ์„ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.
  • → ์˜ˆ) panel.add(aComponent, BorderLayou.PAGE_START);    // ๋ถ์ชฝ๋ฐฐ์น˜
  • ์˜์—ญ ๋ฏธ์ง€์ •์‹œ, ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ์ค‘์•™์— ๋ฐฐ์น˜๋œ๋‹ค. (์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฒฝ์šฐ, ๊ฒน์ณ์ ธ์„œ ๋งˆ์ง€๋ง‰ ์ถ”๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋งŒ ๋ณด์ž„)
์ƒ: PAGE_START (๋˜๋Š” NORTH)
ํ•˜: PAGE_END (๋˜๋Š” SOUTH)
์ขŒ: LINE_START (๋˜๋Š” WEST)
์šฐ: LINE_END ( )
์ค‘์•™: CENTER

 

BorderLayout ํด๋ž˜์Šค[์ฐธ๊ณ ]

์ƒ์„ฑ์ž ๋˜๋Š” ๋ฉ”์†Œ๋“œ ์„ค๋ช…
BorderLayout(int hgap, int vgap) ์ˆ˜ํ‰ ๊ฐ„๊ฒฉ hgap๊ณผ ์ˆ˜์ง ๊ฐ„๊ฒฉ vgap
setHgap(int) ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์˜ ์ˆ˜ํ‰ ๊ฐ„๊ฒฉ ์„ค์ •
setVgap(int) ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์˜ ์ˆ˜์ง ๊ฐ„๊ฒฉ ์„ค์ •

 

GridLayout

  • ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฒฉ์ž๋ชจ์–‘(ํ–‰๋ ฌ)์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.
  • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜๋‹ค. (ํ–‰๊ณผ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ)

 

GridLayout ํด๋ž˜์Šค[์ฐธ๊ณ ]

์ƒ์„ฑ์ž ์„ค๋ช…
GridLayout(int rows, int cols) rows ํ–‰๊ณผ cols ์—ด
GridLayout(int rows, int cols, int hgap, int vgap) rows ํ–‰๊ณผ cols ์—ด,
hgap๊ณผ vgap์˜ ์ˆ˜ํ‰/์ˆ˜์ง ๊ฐ„๊ฒฉ

 

๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž์˜ ์„ค์ • ๋ฐฉ๋ฒ•

1. ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• (์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •)

   → JPanel panel = new JPanel(new BorderLayout());

2. setLayout() ๋ฉ”์†Œ๋“œ ์ด์šฉ (์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์ž๋กœ ์ง€์ •) (์ด๋ฏธ ์ƒ์„ฑ๋œ ํŒจ๋„ ์—ฐ๊ฒฐ๋ฒ•)

   → panel.setLayout(new FlowLayout());

๋”๋ณด๊ธฐ

๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ๊ฐ€ ์‹คํ–‰๋จ

 

์ ˆ๋Œ€ ์œ„์น˜๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ

โ‘  ๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž๋ฅผ null๋กœ ์„ค์ •ํ•œ๋‹ค.

   → setlayout(null);

โ‘ก add() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

   → Button b = Button("Absolute Position Button");

   → add(b);

โ‘ข setBounds() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ๋Œ€ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

   → b.setBounds(x, y, w, h);    // x์ขŒํ‘œ, y์ขŒํ‘œ, ๊ฐ€๋กœํฌ๊ธฐw, ์„ธ๋กœํฌ๊ธฐh

๋”๋ณด๊ธฐ

๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์™ธ๊ด€ ๋ณ€๊ฒฝ์ด๋‚˜ ํฐํŠธ์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ์— ์‰ฝ๊ฒŒ ์ ์‘ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž ์—†์ด ๋ฐฐ์น˜ํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๊ฐ€ ์™ธ๋ถ€์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ‡๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์น˜ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด null๋กœ ์„ค์ •ํ•œ๋‹ค.

 

setBounds()๋Š” setLocation(x,y)์™€ setSize(w,h)๋ฅผ ํ•œ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

 


ํ•™์Šต๋‚ด์šฉ ์ดํ•ด๋„

90% ์ •๋„. ํ”„๋ ˆ์ž„๊ณผ ํŒจ๋„์ด ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฐ๋‹ค.

 

ํ•™์Šตํ™œ๋™ ๋Œ์•„๋ณด๊ธฐ

์˜ˆ์ œ๊ฐ€ ๋ณต์žกํ• ์ˆ˜๋ก ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ, ํด๋ž˜์Šค ๋“ฑ ๋ฐฐ์šด ์ง€์‹์„ ๋งŽ์ด ํ™œ์šฉํ•ด์•ผํ•ด์„œ ์กฐ๊ธˆ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์กŒ๋‹ค. ์ด๋ฒˆ์ฃผ๋Š” ๋‚ด์šฉ์ด ์ ์€๋ฐ ์ €๋ฒˆ์ฃผ์— ๋ฐฐ์šด ๋‚ด์šฉ๊ณผ ์ด์–ด์ง€๋Š” ๋‚ด์šฉ์ด์—ฌ์„œ ์ €๋ฒˆ์ฃผ ๊ฒƒ์„ ํ™•์‹คํ•˜๊ฒŒ ์•Œ์•„๋‘์–ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

๋‹ค์Œ ํ•™์Šต๊ณ„ํš

์ธํ„ฐํŽ˜์ด์Šค, ๋žŒ๋‹ค์‹, ํŒจํ‚ค์ง€