Skip to content

shinsam/SwingUIDesigner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 

Repository files navigation

SwingUIDesigner

๐Ÿ“Œ ๊ฐœ์š”

Java ์ˆ˜์—…์— ์žˆ์–ด์„œ ์ฝ˜์†”๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋‹ค๊ฐ€ Swing์„ ์ด์šฉํ•ด์„œ GUI๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์žฌ๋ฏธ๋„ ์žˆ๊ณ  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ํšจ๊ณผ์ ์ธ ์ˆ˜์—…์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ฒ„ํŠผํ•˜๋‚˜ ๋งŒ๋“œ๋Š”๋ฐ ๋ช‡์ค„์˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์จ์•ผํ•˜๋Š” ์ž‘์—…์€ ๋งค์šฐ ๊ท€์ฐฎ๋‹ค. ๊ฑฐ๊ธฐ์— xy์ขŒํ‘œ๊นŒ์ง€ ์‹ ๊ฒฝ์“ฐ๋ ค๋ฉด ์ดˆ๋ฐ˜๋ถ€ ์ž‘์—…์—์„œ ์ธ๋‚ด์‹ฌ์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

๋˜ํ•œ ๋งค๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋กœ ์ง€๋ฃจํ•œ ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•ด๋ณด์ž๋Š” ์ƒ๊ฐ์œผ๋กœ UI ๋””์ž์ธ ํˆด์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  GPT์™€ ํ•จ๊ป˜!

์ž‘์—…์‹œ๊ฐ„ ์ด 3์‹œ๊ฐ„, ์•ž์œผ๋กœ ๊ธฐ๋Šฅ๋ณด๊ฐ•ํ•ด์„œ ๋” ์žฌ๋ฏธ์žˆ๊ฒŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ์ผœ๋ณด๋ คํ•œ๋‹ค.

๐Ÿงพ SwingUIDesigner ํ”„๋กœ์ ํŠธ ์„ค๋ช…์„œ

SwingUIDesigner๋Š” Java Swing์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋น„์ฃผ์–ผ UI ๋””์ž์ธ ํˆด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋งˆ์šฐ์Šค๋ฅผ ์ด์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์†์„ฑ์„ ์„ค์ •ํ•œ ๋’ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Java ์ฝ”๋“œ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„์ „๋ฌธ ๊ฐœ๋ฐœ์ž๋„ ์ง๊ด€์ ์œผ๋กœ GUI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๐Ÿงฉ ์ฃผ์š” ๊ธฐ๋Šฅ ์š”์•ฝ

  1. ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

    -๋””์ž์ธ ์˜์—ญ์„ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด ์„ค์ • ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋จ

    -์ง€์›๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ข…๋ฅ˜:JButton,JCheckBox,JRadioButton (๋ผ๋””์˜ค ๊ทธ๋ฃน ๊ฐ€๋Šฅ),JLabel (TextView ์—ญํ• )

    -์†์„ฑ ์„ค์ • ํ•ญ๋ชฉ:ํ…์ŠคํŠธ (๊ธฐ๋ณธ๊ฐ’: ์ž๋™ ์ƒ์„ฑ๋œ ์ปดํฌ๋„ŒํŠธ ID), ํฐํŠธ ํฌ๊ธฐ, ํฌ๊ธฐ (width, height), ์ƒ‰์ƒ (JColorChooser๋กœ ์„ ํƒ), JRadioButton์˜ ๊ฒฝ์šฐ ๊ทธ๋ฃน ID ์„ค์ • ๊ฐ€๋Šฅ

  2. ์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ์กฐ์ •

    -์ปดํฌ๋„ŒํŠธ๋Š” ๋“œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ๋””์ž์ธ ํŒจ๋„ ๋‚ด์—์„œ ์ž์œ ๋กญ๊ฒŒ ์œ„์น˜ ์ด๋™ ๊ฐ€๋Šฅ

    -์ด๋™๋œ ์œ„์น˜๋Š” ์ž๋™์œผ๋กœ ์ €์žฅ ์ฝ”๋“œ์— ๋ฐ˜์˜๋จ (getX(), getY() ํ™œ์šฉ)

  3. ์ž๋™ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ์ƒ์„ฑ

    -์ƒ์„ฑ๋˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ํƒ€์ž… ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์œ  ID ์ž๋™ ๋ถ€์—ฌ

    -์˜ˆ: button1, radio2, label3

    -์ด ์ด๋ฆ„์€ ์‹ค์ œ Java ์ฝ”๋“œ ๋‚ด ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ๋จ

  4. ๋ผ๋””์˜ค ๋ฒ„ํŠผ ๊ทธ๋ฃน ์„ค์ •

    -JRadioButton์€ ๋™์ผํ•œ ๊ทธ๋ฃน ID๋ฅผ ๊ฐ–๋Š” ๋ฒ„ํŠผ๋ผ๋ฆฌ ButtonGroup์œผ๋กœ ๋ฌถ์ž„

    -๋™์‹œ์— ํ•˜๋‚˜๋งŒ ์„ ํƒ ๊ฐ€๋Šฅ

    -๊ทธ๋ฃน ์ •๋ณด๋Š” ์ฝ”๋“œ์—๋„ ์ž๋™ ๋ฐ˜์˜๋จ

  5. ์ปดํฌ๋„ŒํŠธ ์„ ํƒ ๋ฐ ์‚ญ์ œ

    -๋งˆ์šฐ์Šค๋กœ ํด๋ฆญ ์‹œ ์„ ํƒ ํ…Œ๋‘๋ฆฌ(๋นจ๊ฐ„์ƒ‰) ํ‘œ์‹œ

    -์„ ํƒ๋œ ์ƒํƒœ์—์„œ Delete ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

  6. ์‹ค์‹œ๊ฐ„ ๋งˆ์šฐ์Šค ์ขŒํ‘œ ํ‘œ์‹œ

    -๋””์ž์ธ ํŒจ๋„ ์ขŒ์ธก ์ƒ๋‹จ์— JLabel์„ ํ‘œ์‹œํ•˜์—ฌ ๋งˆ์šฐ์Šค ์ขŒํ‘œ๋ฅผ ์‹ค์‹œ๊ฐ„ ์ถœ๋ ฅ

    -ํ•ด๋‹น ๋ผ๋ฒจ์€ JLayeredPane์„ ์‚ฌ์šฉํ•ด designPanel ์œ„์— ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒน์ณ์„œ ํ‘œ์‹œ

  7. 50px ๋‹จ์œ„ ๊ทธ๋ฆฌ๋“œ ํ‘œ์‹œ

    -๋””์ž์ธ ์˜์—ญ ๋ฐฐ๊ฒฝ์— ์—ฐํ•œ ํšŒ์ƒ‰ ์„ ์œผ๋กœ 50ํ”ฝ์…€ ๋‹จ์œ„ ๊ฒฉ์ž ํ‘œ์‹œ

    -์ปดํฌ๋„ŒํŠธ ์ •๋ ฌ ๋ฐ ๋ฐฐ์น˜ ์‹œ ๊ฐ€์ด๋“œ ์—ญํ•  ์ˆ˜ํ–‰

  8. ์ฝ”๋“œ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ์ €์žฅ

    -โ€œ์ฝ”๋“œ ๋‚ด๋ณด๋‚ด๊ธฐโ€: ์ฝ˜์†”์— Java ์ฝ”๋“œ ์ถœ๋ ฅ

    -โ€œ์ €์žฅํ•˜๊ธฐโ€: ์‚ฌ์šฉ์ž ์ง€์ • ์œ„์น˜์— .java ํŒŒ์ผ๋กœ ์ €์žฅ (JFileChooser)

    -์ €์žฅ๋˜๋Š” ์ฝ”๋“œ๋Š” ์ „์ฒด UI ๊ตฌ์„ฑ์„ ํฌํ•จํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Java Swing ํ”„๋กœ๊ทธ๋žจ ํ˜•ํƒœ

๐Ÿ“ ์ €์žฅ๋˜๋Š” Java ํŒŒ์ผ ๊ตฌ์กฐ ์˜ˆ์‹œ

public class GuiCode {

public static void main(String[] args) {

    JFrame frame = new JFrame("Generated UI");
    JPanel panel = new JPanel(null);
    Map<String, ButtonGroup> groupMap = new HashMap<>();
    JButton button1 = new JButton("button1");
    button1.setBounds(50, 100, 120, 30);
    panel.add(button1);

    JRadioButton radio1 = new JRadioButton("radio1");
    radio1.setBounds(200, 100, 120, 30);
    panel.add(radio1);
    groupMap.computeIfAbsent("group1", k -> new ButtonGroup()).add(radio1);

    frame.add(panel);
    frame.setVisible(true);
}

}

๐Ÿงฑ ๊ธฐ์ˆ  ์š”์†Œ ์š”์•ฝ

JPanel	UI ์˜์—ญ ๋ถ„๋ฆฌ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ฐฐ์น˜

JLayeredPane	์ขŒํ‘œ ๋ผ๋ฒจ์„ ๊ฒน์ณ์„œ ํ‘œ์‹œ

MouseListener / MouseMotionListener	ํด๋ฆญ, ์ด๋™, ๋“œ๋ž˜๊ทธ ์ฒ˜๋ฆฌ

ButtonGroup	๋ผ๋””์˜ค ๋ฒ„ํŠผ ๊ทธ๋ฃน ๊ด€๋ฆฌ

JFileChooser	์‚ฌ์šฉ์ž ์ง€์ • ์œ„์น˜์— ํŒŒ์ผ ์ €์žฅ

null layout	์ ˆ๋Œ€ ์ขŒํ‘œ ๊ธฐ๋ฐ˜ ๋ฐฐ์น˜

paintComponent()	๊ฒฉ์ž ํ‘œ์‹œ

๐Ÿง  ์ถ”์ฒœ ํ™•์žฅ ๊ธฐ๋Šฅ (ํ–ฅํ›„ ๋ฐœ์ „ ๋ฐฉํ–ฅ) ๊ธฐ๋Šฅ ์ œ์•ˆ ์„ค๋ช…

์ €์žฅ๋œ ๊ตฌ์„ฑ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ	JSON ๋“ฑ์œผ๋กœ ์ €์žฅ ํ›„ ๋‹ค์‹œ ๋กœ๋”ฉ ๊ฐ€๋Šฅ

Undo/Redo	์‚ฌ์šฉ์ž ์•ก์…˜์„ ๊ธฐ๋กํ•˜์—ฌ ๋˜๋Œ๋ฆฌ๊ธฐ ์ง€์›

Snap-to-grid	์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ์ž๋™ ์ •๋ ฌ

์†์„ฑ ํŽธ์ง‘ ๊ธฐ๋Šฅ	์ด๋ฏธ ์ƒ์„ฑ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜์—ฌ ์†์„ฑ ์ˆ˜์ •

๋ ˆ์ด์•„์›ƒ ๊ธฐ๋ฐ˜ ์„ค๊ณ„ ์ง€์›	BorderLayout, GridLayout ๋“ฑ ๋…ผ๋ฆฌ ๋ฐฐ์น˜ ๋„์ž…

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors