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

Programming/Java

<ํ† ์ด ํ”„๋กœ์ ํŠธ ํšŒ๊ณ ๋ก> ์ž๋ฐ” ์Šค์œ™(Java Swing)์„ ์ด์šฉํ•œ GUI ํ”„๋กœ๊ทธ๋žจ(ft. DBeaver)

728x90
๋ฐ˜์‘ํ˜•

 

Java๋‚ด์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” GUI์ธ ์Šค์œ™(swing)์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ† ์ด ํ”„๋กœ๊ทธ๋žจ(๊ฐ€๊ณ„๋ถ€ ํ”„๋กœ์ ํŠธ)์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์–ด๋–ค ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์ƒ๊ฐํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์–ด๋–ค ๊ฒŒ ์žˆ์„์ง€ ํšŒ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

 

ใ€‹ใ€‹ใ€‹๋ฐ”๋กœ๊ฐ€๊ธฐ

  1. ๋กœ๊ทธ์ธ
  2. ํšŒ์›๊ฐ€์ž…
  3. ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ ์‚ฝ์ž…
  4. ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  5. ํ…Œ์ด๋ธ” ์ƒˆ๋กœ๊ณ ์นจ
  6. ํ…Œ์ด๋ธ” ํ–‰ ์‚ญ์ œ

โ–ถ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

ID ํ˜น์€ PW ๋ฏธ ๊ธฐ์ž… ์‹œ

์•„์ด๋”” ํ˜น์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ž…ํ•˜๋Š” ํ…์ŠคํŠธํ•„๋“œ(textfield)๊ฐ€ ๊ธฐ์ž…๋˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋‹จ ๋ผ๋ฒจ์— ๊ฒฝ๊ณ ๋ฌธ์„ ์ƒ์„ฑ.

์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ID ํ˜น์€ PW ์ž…๋ ฅ ์‹œ

์˜ณ์ง€ ์•Š์€ ์•„์ด๋””๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ๊ฒฝ๊ณ ๋ฌธ GUI ์ƒ์„ฑ.

 

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ actionListener ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋” ํ•ด์ฃผ๊ณ  ํ…์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ, ์ •ํ™•ํžˆ๋Š” idHint, pwHint ๋ฌธ์ž์—ด๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ ๋ผ๋ฒจ ๊ฒฝ๊ณ ๋ฌธ์ด ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์คฌ๋‹ค.

์ถ”๊ฐ€๋กœ ์œ ์ € ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” DB์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์€ ์•„์ด๋””๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์–ด์คฌ๋‹ค.

 

โ€ป ์ƒˆ๋กœ์šด GUI ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ํ•˜๋‹จ ๋ผ๋ฒจ์˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์  ์ด์ ์ด ์žˆ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•œ๋‹ค.

ms๋กœ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„์ด์ง€๋งŒ ์„ฑ๋Šฅ์˜ ์ฐจ์ด๋Š” ํ™•์‹คํ•˜๋‹ค. (์‹ค์ œ ์†๋„ ์ฐจ์ด ์•ฝ 20~30๋ฐฐ)

 

โ–ท ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ(jButton1)์— "login"์ด๋ผ๋Š” ์ด๋ฆ„์˜ actionListener ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€

		jButton1.addActionListener(login); // login ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ

 

โ–ท "login" actionListener ๊ฐ์ฒด ์ •์˜

	// "๋กœ๊ทธ์ธ" ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ
	private ActionListener login = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			String id = textField1.getText();
			String pw = textField2.getText();
			if (textField1.getText().equals(idHint) || textField2.getText().equals(pwHint)) {
				jLabel4.setVisible(true);
			} else {
				if (bd.checkIdPw(id, pw)) {
					System.out.println("์•„์ด๋”” ํ™•์ธ");
					jLabel1.setVisible(false);
					new SelectAllGui(id);
					dispose();
				} else {
					System.out.println("๋กœ๊ทธ์ธ ์˜ค๋ฅ˜");
					jLabel4.setVisible(true);
					JOptionPane.showMessageDialog(null, "์•„์ด๋”” ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!");
				}
			}
		}
	}; // end login trigger

 

1. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋Š” ์ˆœ๊ฐ„ id์™€ pw ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

2. ๊ฐ ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๊ฐ’์ด idHint(ํ…์ŠคํŠธ ํ•„๋“œ์— ๊ธฐ๋ณธ์œผ๋กœ ์“ฐ์—ฌ์žˆ๋Š” ๋ฌธ๊ตฌ) ํ˜น์€ pwHint์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด ์ˆจ๊ฒจ ๋†“์•˜๋˜ ํ•˜๋‹จ ๋ฌธ์ž์—ด ๋ผ๋ฒจ(jLabel4)์„ ๋ณด์—ฌ์ค€๋‹ค(". setVisible(true)").

3. ๋‘ ํ…์ŠคํŠธ ํ•„๋“œ์— ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ id์™€ pw๋ฅผ DB์™€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

-> ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ : id๋ฅผ ์ธ์ž๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

-> ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์–ด์ค€๋‹ค.(". showMessageDialog")

โ–ถํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ

ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ํ๋ฆ„

1. ๋กœ๊ทธ์ธ๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋ผ๋„ ๋น„์–ด์žˆ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ๊ฐ€ ์กด์žฌ(ํžŒํŠธ์™€ ๋™์ผํ•œ ๋ฌธ์ž์—ด)ํ•  ๊ฒฝ์šฐ ํ•˜๋‹จ์— ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅ.

2. DB์—์„œ ์ •์˜ํ•œ ํ•„๋“œ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋” ํฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์—†๊ฒŒ ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๋ฌธ์ž์—ด์„ ์ œํ•œ.

3. "์ดˆ๊ธฐํ™”" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ๋ชจ๋‘ "ํžŒํŠธ"์™€ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝ.

 

โ–ท "ํšŒ์›๊ฐ€์ž…" GUI์— ํฌํ•จ๋œ "๋“ฑ๋ก ๋ฒ„ํŠผ"๊ณผ "์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ" ์ด๋ฒคํŠธ

	// "๋“ฑ๋ก" ์ด๋ฒคํŠธ
	private ActionListener userJoin = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			
			if (jTextField1.getText().equals(idHint) || jTextField2.getText().equals(pwHint)
					|| jTextField3.getText().equals(phHint) || jTextField4.getText().equals(nameHint)) {
				jLabel6.setText("๋ชจ๋“  ํ•ญ๋ชฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
			} else {
				if (jTextField1.getText().length() > 10) {
					jLabel6.setText("์•„์ด๋””๊ฐ€ ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค.\n(์˜๋ฌธ, ์ˆซ์ž ์กฐํ•ฉ 10์ž ์ด๋‚ด)");
				} else if (jTextField2.getText().length() > 8) {
					jLabel6.setText("๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค.\n(์˜๋ฌธ, ์ˆซ์ž ์กฐํ•ฉ 8์ž ์ด๋‚ด)");
				} else if (jTextField3.getText().length() > 11) {
					jLabel6.setText("์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค.\n(์ˆซ์ž 11์ž ์ด๋‚ด)");
				} else if (jTextField4.getText().length() > 8) {
					jLabel6.setText("์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค.\n(ํ•œ๊ธ€ 8์ž ์ด๋‚ด)");
				} else {
					vo = new UserinfoVo(jTextField1.getText(), jTextField2.getText(), jTextField3.getText(),
							jTextField4.getText());
					bd = UserinfoDao.getInstance();
					
					if (!bd.idcheck(vo.getId())) {
						bd.insert(vo);
						dispose();
					} else {
						JOptionPane.showMessageDialog(null, "์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์•„์ด๋””์ž…๋‹ˆ๋‹ค");
					}
				}
			}

		}
	}; // userJoin end

	// "์ดˆ๊ธฐํ™”" ๋ฒ„ํŠผ ์ด๋ฒคํŠธ
	private ActionListener initTextField = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			jTextField1.setText(idHint);
			jTextField2.setText(pwHint);
			jTextField3.setText(phHint);
			jTextField4.setText(nameHint);
		}
	}; // init end

โ–ถํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ ์‚ฝ์ž…

ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ๋ž€? ํ…์ŠคํŠธ ํ•„๋“œ ์†์— ์›Œํ„ฐ๋งˆํฌ์™€ ๊ฐ™์ด ์‹ค์ œ ๊ธฐ์ž…๋œ ๊ฐ’์€ ์•„๋‹ˆ์ง€๋งŒ(null ์—ญํ• ) ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ex) "์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."

ํžŒํŠธ๊ฐ€ ์‚ฝ์ž…๋œ ํ…์ŠคํŠธ ํ•„๋“œ

ํ…์ŠคํŠธ ํžŒํŠธ๋Š” ์‹ค์ œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ํžŒํŠธ์™€ ๋™์ผํ•œ ๋ฌธ์ž์—ด์€ null๋กœ ์ทจ๊ธ‰.

2. ํ…์ŠคํŠธ ํ•„๋“œ์— ๊ฐ’์„ ๊ธฐ์ž…ํ•˜๋ ค ํ•  ๋•Œ, ํžŒํŠธ ๊ฐ’์ด๋ผ๋ฉด ๋น„์–ด์žˆ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ(๊ณต๋ฐฑ)๊ฐ€ ๋˜์–ด์•ผ ํ•จ. 

3. ํ…์ŠคํŠธ ํ•„๋“œ์— ๊ฐ’์„ ๊ธฐ์ž…ํ•˜๋˜ ์ค‘์ด๋ผ๋ฉด, ๊ทธ๋Œ€๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ.

4. (์˜ต์…˜) ์‚ฌ์šฉ์ž ๊ธฐ์ž… ๊ฐ’๊ณผ ํžŒํŠธ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ํฐํŠธ์™€ ํ…์ŠคํŠธ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•จ.

ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ์˜ ๊ธฐ๋Šฅ

		Font gainFont = new Font("Tahoma", Font.PLAIN, 11);
		Font lostFont = new Font("Tahoma", Font.ITALIC, 11);

		textField1.setText(idHint);	// ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ์˜ ๊ธฐ๋ณธ ๋ฌธ์ž
		textField1.setFont(lostFont);	// ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ์˜ ๊ธฐ๋ณธ ํฐํŠธ
		textField1.setForeground(Color.GRAY);	// ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ์˜ ๊ธฐ๋ณธ ์ƒ‰์ƒ
		textField1.addFocusListener(new FocusListener() {	// ํ…์ŠคํŠธ ํ•„๋“œ ํฌ์ปค์Šค ์‹œ ์ด๋ฒคํŠธ

			@Override
			public void focusLost(FocusEvent e) {	// ํฌ์ปค์Šค๋ฅผ ์žƒ์—ˆ์„ ๋•Œ,
				if (textField1.getText().equals("")) {
					textField1.setText(idHint);
					textField1.setFont(lostFont);
					textField1.setForeground(Color.GRAY);
				}
			}

			@Override
			public void focusGained(FocusEvent e) {	// ํฌ์ปค์Šค๋ฅผ ์–ป์—ˆ์„ ๋•Œ,
				if (textField1.getText().equals(idHint)) {
					textField1.setText("");
					textField1.setFont(gainFont);
					textField1.setForeground(Color.BLACK);
				}
			}
		});

์ด๋•Œ, ํ…์ŠคํŠธ ํ•„๋“œ์˜ ํฐํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋˜๋Š” ๊ฒŒ ์ธ์ฝ”๋”ฉ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ…์ŠคํŠธ ํ•„๋“œ์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ ์ค‘ ํ•œ๊ธ€์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋ฉด, ํ•œ๊ธ€์„ ์ง€์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์ด ์—†๋‹ค. (ํ•œ๊ธ€์„ ์ง์ ‘ ๊ธฐ์ž…ํ•  ๋•Œ, ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.)

๋‚˜์˜ ๊ฒฝ์šฐ, ํ•œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, "Glum12" ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

โ–ถํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

private DefaultTableModel model;
private JTable jTable1;
private JScrollPane jScrollPane1;
List<String[]> rows;
String[][] data;
String[] columns;

// ArrayList์ธ rows๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด data๋กœ ๋ณ€ํ™˜ ํ›„ ๋งคํ•‘
rows = dao.getListById(id); // ๋ฐ์ดํ„ฐ ํŠœํ”Œ(ArrayList)
columns = new String[] { "์ˆ˜์ž…|์ง€์ถœ", "๋‚ ์งœ", "๊ธˆ์•ก", "๋ถ„๋ฅ˜", "๋ฉ”๋ชจ", "๊ณ„์ขŒ๋ฒˆํ˜ธ" , "IDX"}; // ์ปฌ๋Ÿผ
data = rows.stream().toArray(String[][]::new); // ArrayList -> Array

// jTable1 ์ƒ์„ฑ
model = new DefaultTableModel(data, columns); // ํ…Œ์ด๋ธ”์— ๋ถ™์ผ ๋ชจ๋ธ ๊ฐ์ฒด ์ƒ์„ฑ(๋ฐ์ดํ„ฐ, ์ปฌ๋Ÿผ)
jTable1 = new javax.swing.JTable(model);	// ํ…Œ์ด๋ธ” ๊ฐ์ฒด ์ƒ์„ฑ
jScrollPane1.setViewportView(jTable1);	// ํŒจ๋„์— ํ…Œ์ด๋ธ” ๋ถ™์ด๊ธฐ
		
// jTable1 ์ปฌ๋Ÿผ ๋ณ„ ์ •๋ ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(jTable1.getModel());
jTable1.setRowSorter(sorter);

์Šค์œ™์—์„œ ํ…Œ์ด๋ธ”์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„  3๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

1. ํ…Œ์ด๋ธ”์— ์‚ฝ์ผํ•  ํ–‰(ํŠœํ”Œ)๊ณผ ์—ด(์นผ๋Ÿผ)์„ ์ธ์ž๋กœ ๋ฐ›์€ ๋ชจ๋ธ(model) ๊ฐ์ฒด ์ƒ์„ฑ

2. ์ƒ์„ฑํ•œ ๋ชจ๋ธ์„ ์ธ์ž๋กœ ๋ฐ›์•„ ํ…Œ์ด๋ธ”(JTable) ๊ฐ์ฒด ์ƒ์„ฑ

3. ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ํŒจ๋„์— ์‚ฝ์ž…

 

์—ฌ๊ธฐ์„œ ๋ชจ๋ธ(mode) ๊ฐ์ฒด์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š” ํ–‰ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด(Array) ๊ฐ์ฒด์—ฌ์•ผ ํ•˜๋Š”๋ฐ ๋‚˜์˜ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ArrayList๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ๋” Array๋กœ ๋ณ€ํ™˜(ArrayList -> Array)ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํ•ฉ๋ฆฌ๊ฐ€ ์žˆ์—ˆ๋‹ค.(ArrayList ์ธ "rows"๋ฅผ Array์ธ "data"๋กœ ์บ์ŠคํŒ…(casting) ํ•„์š”)

=> ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜์ •์„ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ (์„ฑ๋Šฅ์  ์ธก๋ฉด)

โ–ถํ…Œ์ด๋ธ” ์ƒˆ๋กœ๊ณ ์นจ

// "์ƒˆ๋กœ๊ณ ์นจ" ์ด๋ฒคํŠธ
private void jButton2ActionPerformed(ActionEvent evt, String id) {
	// query ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ DB์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด
	InexDao dao = InexDao.getInstance();
	
    // ์ƒˆ list๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ
	rows = dao.getListById(id);
	
    // columns = new String[] { "์ˆ˜์ž…|์ง€์ถœ", "๋‚ ์งœ", "๊ธˆ์•ก", "๋ถ„๋ฅ˜", "๋ฉ”๋ชจ", "๊ณ„์ขŒ๋ฒˆํ˜ธ" , "IDX"};
	data = rows.stream().toArray(String[][]::new);
	
    // ์ƒˆ ๋ชจ๋ธ ์ƒ์„ฑ ํ›„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
	model = new DefaultTableModel(data, columns);
	jTable1 = new JTable(model);
	
	// jTable1 sort
	TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(jTable1.getModel());
	jTable1.setRowSorter(sorter);
    
    jScrollPane1.setViewportView(jTable1);
}

"์ƒˆ๋กœ๊ณ ์นจ" ๋ฒ„ํŠผ ์ด๋ฒคํŠธ์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ๋œ ํ…Œ์ด๋ธ”์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์ƒˆ๋กœ์šด ๋ชจ๋ธ(model) ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๋˜๋‹ค์‹œ ํ…Œ์ด๋ธ”(JTable)์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

cloumn์˜ ๊ฒฝ์šฐ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ๋‹ค์‹œ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค.

 

์นผ๋Ÿผ ๋ณ„ ์ •๋ ฌ์„ ๋‹ด๋‹นํ•˜๋Š” "TableRowSorter" ์—ญ์‹œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํ…Œ์ด๋ธ”์„ ๊ธฐ์กด์— ์žˆ๋˜ ํŒจ๋„์— ๋‹ค์‹œ ์„ธํŒ…ํ•ด์คŒ์œผ๋กœ์จ ์ƒˆ๋กœ๊ณ ์นจ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ–ถํ…Œ์ด๋ธ” ํ–‰ ์‚ญ์ œ

ํ…Œ์ด๋ธ”์˜ ํ–‰ ํด๋ฆญ ํ›„ ์‚ญ์ œ

โ–ท์‚ญ์ œ ๊ธฐ๋Šฅ

1. ์‚ญ์ œ๋ฅผ ์›ํ•˜๋Š” ํŠœํ”Œ์„ ์„ ํƒํ•œ๋‹ค.

2. ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ -> ํ…Œ์ด๋ธ”์—์„œ ์‚ญ์ œ๋œ ํ›„ DB์— ์ ์šฉ.

	// "์‚ญ์ œ" ์ด๋ฒคํŠธ
	private void jButton3ActionPerformed(ActionEvent evt) {
		int row = jTable1.getSelectedRow();	// ์„ ํƒ๋œ ํ–‰ ๋ฒˆํ˜ธ
		int idx = Integer.valueOf((String)jTable1.getValueAt(row, 6));	// ์„ ํƒ๋œ ํ–‰, ์—ด์˜ ๋ฐ์ดํ„ฐ ๊ฐ’
		
        InexDao dao = new InexDao();	// DB ์กฐ์ž‘์„ ์œ„ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ
		
		model.removeRow(row);	// ๋ชจ๋ธ์˜ ํ–‰ ์‚ญ์ œ
		dao.delete(idx);	// DB์‚ญ์ œ ๋ฉ”์„œ๋“œ
		
		System.out.println(row +"  "+ idx);	// ํ–‰, ์‚ญ์ œ ์กฐ๊ฑด ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถœ๋ ฅ(ํ™•์ธ์šฉ)
	}

ํ˜„์žฌ ๋ชจ๋ธ(model)์—์„œ ํ–‰์„ ์‚ญ์ œํ•˜๋Š” ๋‚ด์žฅ ๋ฉ”์„œ๋“œ(removeRow(์‚ญ์ œํ•  ํ–‰))์„ ์‚ฌ์šฉํ•˜๋ฉด GUI ํ…Œ์ด๋ธ”์— ๋ฐ”๋กœ ์ ์šฉ๋œ๋‹ค.

(๋งŒ์•ฝ, ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ์นผ๋Ÿผ ๋ณ„ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋ฐ”๋กœ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.)

 

getSelectedRow() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด jTable์—์„œ ์„ ํƒ๋œ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ, ํ…Œ์ด๋ธ”์ด setEnable(false)๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค๋ฉด ํ–‰์ด ์„ ํƒ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ setEnable(true)๋กœ ๋ณ€๊ฒฝํ•ด ์ค€๋‹ค.

 

remoeRow์€ DB์—๋Š” ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ์— ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋†“์€ DB์‚ญ์ œ๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•