[JAVA] Day 19 - AWT (Frame)

sueยท2023๋…„ 12์›” 11์ผ

๐Ÿ“’๊ตญ๋น„ํ•™์› [JAVA]

๋ชฉ๋ก ๋ณด๊ธฐ
19/20
post-thumbnail

Socket


๐Ÿ“Œ Note Code


  • Event(Frame) : ์ปฌ๋Ÿฌ, ๋“œ๋ž˜๊ทธ, ์ฐฝํฌ๊ธฐ ๋“ฑ,,,

  • c์–ธ์–ด : MFC

  • JAVA : Frame (๋А๋ ค์„œ ์•ˆ๋งŒ๋“ฆ)

  • ์›น : event programming

  • ์œˆ๋„์šฐ์— ํ•„์š”ํ•œ ๋ชจ๋“ ๊ฒƒ์„ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ class๋ฅผ (Frame) ์ƒ์†

  • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋†“๊ณ  (์Šค์Šค๋กœ ์›€์ง์ž„) ํƒ€์ดํ•‘, ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ , ํด๋ฆญํ•จ



1. Frame ์ƒ์† / WindowListener ๊ฐ์‹œ์ž

Test1

๐Ÿ’ป ์ž…๋ ฅ


import java.awt.Color;
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

// AWT
public class Test1 extends Frame implements WindowListener { //Listener ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฐ์‹œ์ž

	private static final long serialVersionUID = 1L; // = ๊ณต๊ฐ„์ด ์—„์ฒญ ํผ

	public Test1() { // heap์˜์—ญ์— ์ƒ์„ฑ์ž๋ฅผ ์ฝ”๋”ฉํ•ด์คŒ

		setTitle("์ž๋ฐ” ์œˆ๋„์šฐ");
		setSize(200, 300); //์ฐฝ ํฌ๊ธฐ
		setBackground(new Color(150, 200, 150));
		
		addWindowListener(this); //cctv - ๋‚˜ ๊ฐ์‹œํ•ด (listener) - ์ฐฝ๋‹ซ๋Š”๊ฑฐ

		setVisible(true); //์›๋ž˜ ์•ˆ๋ณด์—ฌ์ฃผ๋Š”๋ฐ true๋‹ˆ๊นŒ ์ฐฝ ์‹ค์ œ๋กœ ๋ณด์—ฌ์ค˜

		//ํ•ด๋‹น ์ฐฝ : frame
		
		
	}

	public static void main(String[] args) {
		
		new Test1();// ์ฃผ์†Œ์— ์˜ฌ๋ฆดํ•„์š” ์—†์ด , ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์˜ฌ๋ผ๊ฐ€๋ฉด(new) ๋…์ž์ ์œผ๋กœ ์•Œ์•„์„œ ์›€์ง์ž„

	}

	@Override
	public void windowOpened(WindowEvent e) {
	}

	@Override
	public void windowClosing(WindowEvent e) { //x๋ฒ„ํŠผ ๋ˆŒ๋ €์„๋•Œ ์ข…๋ฃŒํ• ๋ž˜?๋ผ๊ณ  ๋ฌผ์–ด๋ณด๋Š”๊ฑฐ
		System.exit(0);
	}

	@Override
	public void windowClosed(WindowEvent e) {
	}

	@Override
	public void windowIconified(WindowEvent e) {
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
	}

	@Override
	public void windowActivated(WindowEvent e) {
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
	}

}


๐Ÿ’ก **์ถœ๋ ฅ**
[์ดˆ๋ก์ƒ‰ ์ฐฝ(200, 300)์ด ๋œธ - ๋‹ซ๊ธฐ X๋ฒ„ํŠผ ํ™œ์„ฑํ™” ์•ˆ๋จ] 



๐Ÿ“Œ Note Code




2. addWindowListener(new MyWindowAdapter()); ๊ฐ์ฒด์ƒ์„ฑ

Test2

๐Ÿ’ป ์ž…๋ ฅ


import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test2 extends Frame {


	private static final long serialVersionUID = 1L;

	public Test2() {
		
		setTitle("์œˆ๋„์šฐ");
		setSize(200, 300);

		addWindowListener(new MyWindowAdapter()); // class MyWindowAdater extends WindowAdapter [์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์•ˆ์—์„œ ๊ฐ์ฒด
													// ์ƒ์„ฑ]

		setVisible(true);

	}

	// inner class : ๋ฐ”๊นฅ์—์„œ ํ˜ธ์ถœ๋„ ์•ˆํ•˜๊ณ  (- exit) ์œ„ ํด๋ž˜์Šค์™€ ์นœ๋ฐ€ํ• ๋•Œ - ๋‚ด๋ถ€์—์„œ ๋งŒ๋“ค์—ˆ์Œ ๋‚ด๋ถ€์—์„œ ํ•ด๊ฒฐํ•จ
	// WindowAdapter : windowlister์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์–ด์„œ ์ƒ์†๋ฐ›๊ฒŒ ๋˜๋ฉด ๊ณจ๋ผ๋จน์„ ์ˆ˜ ์žˆ์Œ
	class MyWindowAdapter extends WindowAdapter {

		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}

	}

	public static void main(String[] args) {

		new Test2();
	}
}


๐Ÿ’ก **์ถœ๋ ฅ**
[ํ•˜์–€์ƒ‰ ์ฐฝ(200, 300)์ด ๋œธ - ๋‹ซ๊ธฐ๋ฒ„ํŠผ ํ™œ์„ฑํ™”] 



๐Ÿ“Œ Note Code




3. ๋ฌด๋ช…์˜ ํด๋ž˜์Šค

Test3

๐Ÿ’ป ์ž…๋ ฅ

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test3 extends Frame {


	private static final long serialVersionUID = 1L;

	public Test3() {
		
		setTitle("์œˆ๋„์šฐ");
		setSize(200, 300);

		addWindowListener(new WindowAdapter() {//๋ฌด๋ช…์˜ ํด๋ž˜์Šค
			
			@Override
			public void windowClosing(WindowEvent e) {
			System.exit(0);
			}
			
		}); 
		setVisible(true);

	
	}

	public static void main(String[] args) {

		new Test3();
	}
}


๐Ÿ’ก **์ถœ๋ ฅ**
[ํ•˜์–€์ƒ‰ ์ฐฝ(200, 300)์ด ๋œธ - ๋‹ซ๊ธฐ๋ฒ„ํŠผ ํ™œ์„ฑํ™”] 



๐Ÿ“Œ Note Code




4. ๋ฒ„ํŠผ / ๊ธ€์”จ ์“ฐ๊ธฐ

Test4

๐Ÿ’ป ์ž…๋ ฅ


import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test4 extends Frame implements ActionListener{ //ActionListener : ๋‚ด๋ถ€ ๊ฐ์‹œ

	private static final long serialVersionUID = 1L;

	private Button btn;  //Button : ํด๋ž˜์Šค
	private TextArea ta; //๋ฐ์ดํ„ฐ ๋ณด์ด๋Š” ์ฐฝ
	private TextField tf;//๋ฐ์ดํ„ฐ ์ž…๋ ฅ
	
	public Test4() {
		
		//๊ฐ์ฒด์ƒ์„ฑ
		btn = new Button("์ถ”๊ฐ€");
		ta = new TextArea();
		tf = new TextField();
		
		add(tf,BorderLayout.NORTH); 
		add(ta,BorderLayout.CENTER); 
		add(btn,BorderLayout.SOUTH); 
		
		setTitle("์œˆ๋„์šฐ");
		setSize(200, 300);
		
		//๊ฐ์‹œ์นด๋ฉ”๋ผ
		tf.addActionListener(this);
		btn.addActionListener(this);
		
		addWindowListener(new WindowAdapter() { //WindowAdapter = frame์˜ ์ด๋ฒคํŠธ
		
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		
		});
		
		setVisible(true);
		
		
		
	}
	
	
	public static void main(String[] args) {

		new Test4();
	}


	@Override
	public void actionPerformed(ActionEvent evt) { //๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ if๋ฌธ์œผ๋กœ ๊ด€๋ฆฌ , evt= event
		
		Object ob = evt.getSource(); // ๋ฒ„ํŠผ or TextField  / object๋กœ ๋ฐ›์•„์•ผํ•˜๊ณ (์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ์ง€ ๋ชจ๋ฅด๋‹ˆ) = ์†Œ์Šค๋ฐ›์•„๋‚ด 
		
		if(ob instanceof Button || ob instanceof TextField) {
			
			String str = tf.getText();
			
			if(!str.equals("")) {
				ta.append(str+"\r\n"); // append : ๋ฌธ์ž์—ด ๋ˆ„์  ,   \r ๋ฌธ์ž์—ด ๋งจ์•ž์œผ๋กœ ์ด๋™
				
			}
				
			tf.setText(""); // ๋‹ค์Œ ํ…์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ง€์›Œ์ฃผ๊ธฐ
			tf.requestFocus(); // ์ปค์„œ ๊นœ๋นก๊นœ๋นก ํฌ์ปค์Šค๊ฐ€ ์œ„์น˜ํ•ด์„œ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆผ
			
		}
	}
}


๐Ÿ’ก **์ถœ๋ ฅ**
[ํ•˜์–€์ƒ‰ ์ฐฝ(200, 300)์ด ๋œธ - ๋‹ซ๊ธฐ๋ฒ„ํŠผ ํ™œ์„ฑํ™”] 



๐Ÿ“Œ Note Code




5. ์„ฑ์ ์ฒ˜๋ฆฌํ‘œ ๋งŒ๋“ค๊ธฐ

Test5

๐Ÿ’ป ์ž…๋ ฅ

import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test5 extends Frame implements ActionListener {

	private static final long serialVersionUID = 1L;

	private TextField[] tf = new TextField[4]; // ๋ฐฐ์—ด

	private Label result = new Label("", Label.LEFT); // ์ด์  - ๊ฒฐ๊ณผ๋งŒ ๋”ํ•ด์„œ ๋”ฑ ํ‘œ์‹œ๋งŒ ํ•ด์ฃผ๊ฒŒ๋” (ํ˜„์žฌ - ์•„๋ฌด๊ฒƒ๋„ ์•ˆ์จ๋†จ์Œ, ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ธ€์”จ ์“ธ๊ฑฐ์ž„)

	private Button btn1, btn2;

	public Test5() {

		String[] title = { "์ด๋ฆ„", "๊ตญ์–ด", "์˜์–ด", "์ˆ˜ํ•™", "์ด์ " };

		setTitle("์„ฑ์ ์ฒ˜๋ฆฌ");
		setLayout(null);// frame์— null๋กœ ๊นจ๋—ํ•˜๊ฒŒ ์ง€์šด ๋’ค(์ดˆ๊ธฐํ™”์ž‘์—… ํ›„,) ์ขŒํ‘œ๋กœ ์ •ํ• ๊ฑฐ๋‹ค

		for (int i = 0; i < 5; i++) {

			Label lbl = new Label();
			lbl.setText(title[i]);

			lbl.setBounds(10, (i + 1) * 30, 50, 20); // xy์™€ wh์˜ ์‚ฌ์ด ๊ผญ์ง€์ ์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์คŒ
			add(lbl);

			if (i != 4) {
				// TextField
				tf[i] = new TextField();

				tf[i].setBounds(80, (i + 1) * 30, 70, 20);
				tf[i].addKeyListener(new keyHandler());
				add(tf[i]);

			} else {
				// Label = 4์ผ๋•Œ

				result.setBounds(80, (i + 1) * 30, 70, 20);
				add(result);
			}

		}

		// ๊ฒฐ๊ณผ button
		btn1 = new Button("๊ฒฐ๊ณผ");
		btn1.setBounds(180, 30, 60, 20);
		add(btn1);
		btn1.addActionListener(this);// ๊ฐ์‹œ์นด๋ฉ”๋ผ
		btn1.addKeyListener(new keyHandler());//ํ‚ค๋ณด๋“œ์˜ ๊ฐ์‹œ์นด๋ฉ”๋ผ
		
		
		// ์ข…๋ฃŒ button
		btn2 = new Button("์ข…๋ฃŒ");
		btn2.setBounds(180, 60, 60, 20);
		add(btn2);
		btn2.addActionListener(this);// ๊ฐ์‹œ์นด๋ฉ”๋ผ

		
		// AWT = abstract windows toolkit -> version up!๋ผ์„œ [SWING]์ถœ์‹œ - ์ขŒํ‘œ์— ์˜ํ–ฅX

		addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}

		});

		setSize(260, 180);
		setResizable(false); // ์‚ฌ์ด์ฆˆ ๋ชป์ค„์ž„
		setVisible(true);

	}

	public static void main(String[] args) {
		new Test5();
	}

	private void execute() { //์ด์ 

		int tot = 0;

		try {

			for (int i = 1; i <= 3; i++) { // 0์€ ์ด๋ฆ„
				tot += Integer.parseInt(tf[i].getText()); //์ •์ˆ˜(๋ฌธ์ž์—ด)๋กœ ๋ฐ”๊ฟˆ
			}

			result.setText(Integer.toString(tot));//Integer.toString : int ํ˜•ํƒœ๋ฅผ stringํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
			//result.setText(tot+""); //๋ฌธ์ž์—ด๋งŒ๋“ค๊ณ ์‹ถ์œผ๋ฉด ์ˆซ์ž+""ํ•ด๋ผ
			
			
		} catch (Exception e2) {
			result.setText("์ž…๋ ฅ์˜ค๋ฅ˜!!");
		}
		
		
	}
	
	
	
	@Override
	public void actionPerformed(ActionEvent e) {

		Object ob = e.getSource();// ์ด๋ฒคํŠธ๋ฅผ ob๋กœ ๋ฐ›์•„์„œ

		if (ob instanceof Button) { // ๊ทธ ob๊ฐ€ ๋ฒ„ํŠผ์ด์•ผ?

			Button b = (Button) ob; // ob ๋‹ค์šด์บ์ŠคํŒ…ํ•ด์„œ b์— ๋„ฃ์–ด๋ผ - (Button): ์˜ค๋ธŒ์ ํŠธ

			if (b == btn1) {
				
				execute(); //์ด์ ๊ตฌํ•˜๋Š” ๋ฉ”์„œ๋“œ - 2) ๋งˆ์šฐ์Šค๋กœ๋„ ๊ฐ€๋Šฅ

		

			} else if (b == btn2) {
				System.exit(0);
			}

		}

	} //actionPerform...end
	
	
	class keyHandler extends KeyAdapter{ //ํ‚ค๋ณด๋“œ์˜์—ญ
		
		@Override
		public void keyPressed(KeyEvent e) {

			Object ob = e.getSource(); // ์ด๋ฒคํŠธ ๋ฐ›์•„๋ƒ„

			if (e.getKeyCode() != KeyEvent.VK_ENTER) {// VK_ENTER ์—”ํ„ฐ ํ‚ค๊ฐ’
				return;
			}

			if (ob instanceof Button) {

				execute(); //์ด์ ๊ตฌํ•˜๋Š” ๋ฉ”์„œ๋“œ 1) (tab) ํ‚ค๋ณด๋“œ๋กœ๋„ ๊ฐ€๋Šฅ
				return;
			}

			if (ob instanceof TextField) { // ์ด๋ฆ„ ~ ์ˆ˜ํ•™๊นŒ์ง€ 0123๊นŒ์ง€๋‹ˆ๊นŒ

				TextField t = (TextField)ob;

				for (int i = 0; i < tf.length; i++) {

					if (i != 3 && tf[i] == t) {
						tf[i + 1].requestFocus(); // ๋ฐ”๋กœ ๋‹ค์Œ ์•„๋ž˜์นธ์— ํฌ์ปค์Šค (์ปค์„œ) ๊ฐ–๋‹ค๋†”
						return;//๋”์ด์ƒ ๋น„๊ต ํ•˜์ง€๋งˆ
						
					} else if (tf[3] == t) { // t : ๋‚ด๊ฐ€ ์นœ 0123์ค‘์— ์นธ
						btn1.requestFocus();
						return;//๋”์ด์ƒ ๋น„๊ต ํ•˜์ง€๋งˆ
					}

				}
			}

		}

	}

}


๐Ÿ’ก **์ถœ๋ ฅ**
[์ด๋ฆ„ / ๊ตญ์–ด / ์˜์–ด /์ˆ˜ํ•™ / ์ด์  / ๊ฒฐ๊ณผ๋ฒ„ํŠผ / ์ข…๋ฃŒ๋ฒ„ํŠผ ํ™œ์„ฑํ™”] 


0๊ฐœ์˜ ๋Œ“๊ธ€