본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Playdata_study/Java

210701_Java (user class, GUI구현)

by 케리's 2021. 7. 1.

User_class

 

 

[Score class]

 

package com.exam;

// 3과목의 총점, 평균, 학점을 구하자.
// main 에서 값을 줄거야

public class Score {

		private int kor; 
		private int eng;
		private int mat;
				
		public Score() {
			super();			
		}
		
		public Score(int kor, int eng, int mat) {
			super();
			this.kor = kor;
			this.eng = eng;
			this.mat = mat;
		}
		
		public int getKor() {
			return kor;
		}
		public void setKor(int kor) {
			this.kor = kor;
		}
		public int getEng() {
			return eng;
		}
		public void setEng(int eng) {
			this.eng = eng;
		}
		public int getMat() {
			return mat;
		}
		public void setMat(int mat) {
			this.mat = mat;
		}
		
		public int getTot() {
			int tot = 0;
			tot = this.getKor() + this.getEng() + this.getMat();
			return tot;
		}
		
		
		public double getAvg() {
			double avg =0;
			avg = this.getTot()/3.0;
			return avg;
			
		}
		//switch case : if문과 비슷하지만 좀 더 정형화된 제어문
		
		public String Getgrade() {
			String grade = null; //메서드안에 초기변수를 주면 지역변수?
			switch((int)getAvg()/10) { //98.0 --> 9.8 -> 9 / 100.0 -> 10.0 -> 10
			case 10:
			case 9 : grade = "A";
					 break;
			case 8 : grade = "B";
					 break;
			case 7 : grade = "C";
					 break;
			case 6 : grade = "D";
					 break;
		    default : 
		    		grade = "F";
			}
			return grade;
			}
		
		@Override
		public String toString() {
			String str = String.format("%5d %5d %5d %5d %3.1f %3s\n", 
					this.getKor(), this.getEng(), this.getMat(), this.getTot(),this.getAvg(),this.Getgrade());
			return str;
		}
		// 변수선언 -> 값 대입 -> 연산 -> 출력
		// 멤버변수선언 -> 생성자선언 -> getter&setter -> 연산메소드 -> 출력메소드





 

 

Q1-1) 3과목의 총점, 평균, 학점을 구하자.

 

	public static void main(String[] args) {
		Score s1 = new Score (90,80,60);
		Score s2 = new Score (100,80,60);
		Score s3 = new Score (90,80,50);
		
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);
        
 ======================================================================
 
    90    80    60   230 76.7   C

  100    80    60   240 80.0   B

   90    80    50   220 73.3   C

 

 

 

Q1-2) s1의 국어 점수를 100 변환 후 출력하자.

 

 


// s1의 국어점수를 100 변환 후 출력하자.
// main 에서 값을 줄거야


	public static void main(String[] args) {
		Score s1 = new Score (90,80,60);
		Score s2 = new Score (100,80,60);
		Score s3 = new Score (90,80,50);
		
	
		//s1의 국어점수를 100 변환 후 출력하자.
		s1.setKor(100); // 값 전달 및 변경
		System.out.println(s1);
        
 ====================================================================
 
   100    80    60   240 80.0   B

 

 

Q1-3) s3의 국어점수를 0으로 변환 후 출력하자.

 

		
	// s3의 국어점수를 0으로 변환 후 출력하자.
		s3.setKor(0);
		System.out.println(s3);
		System.out.println(s3.getKor());
        
        
  ==================================================
  
      0    80    50   130 43.3   F

		0

 

 

 

Q2-1) Object Array 를 이용해 객체를 출력 

 

		
	public static void main(String[] args) {

		
		// Object Array 1
		Score[] sm = new Score[3];
		sm[0] = new Score (90,80,60);
		sm[1] = new Score (100,80,60);
		sm[2] = new Score (90,80,50);
		


		for(Score res : sm) {
			System.out.println(res);
		}
        
        
		sm[1].setKor(0);
		System.out.println(sm); // 주소번지리턴
		System.out.println(sm[1]);
	

	}
}
==========================================================================

   90    80    60   230 76.7   C

  100    80    60   240 80.0   B

   90    80    50   220 73.3   C

[Lcom.exam.Score;@1540e19d
    0    80    60   140 46.7   F

 

 

Q2-2) Object Array 를 이용해 객체를 출력 

 

 

  // Object Array 2
             
	Score[] sm = new Score[] {
          new Score (90,80,60),
          new Score (100,80,60),
          new Score (90,80,50)};
	
	my_print(sm);
	}
	


	public static void my_print(Score[] sm) {
		for(Score res:sm) {
			System.out.println(res);
		}
	}}
    
==========================================================

   90    80    60   230 76.7   C

  100    80    60   240 80.0   B

   90    80    50   220 73.3   C

 

 

[Address class]

 

package com.exam;

import java.io.Serializable;

// 주소록을 객체단위로 읽고싶군!
// Serializable: 객체단위로 끊어서 보내주는 것
 
public class Address implements Serializable{ //역 직렬화가 꼭 필요하다.

		
		private String addr;
		private String tel;
		
	
		public String getAddr() {
			return addr;
		}

		public void setAddr(String addr) {
			this.addr = addr;
		}

		public String getTel() {
			return tel;
		}

		public void setTel(String tel) {
			this.tel = tel;
		}

		public Address() {
			
		}		
		public Address( String addr, String tel) {
			
			this.addr = addr;
			this.tel = tel;
		}
		
		@Override
		public String toString() {
			String str = String.format("%5s %5s \n", this.getAddr(),this.getTel());
			return str;
		}


	}

 

 

Q3) 멤버를 클래스로 가지는 클래스를 만들자 

 

 

  [Score class] , [Address class] → 멤버클래스

  [MyClass] → 멤버를 클래스로 가지는 클래스

 

package com.exam;

public class MyClass {
	//멤버를 클래스로 가지는 클래스
    
	private String name; // java lang class
	private Address m_address; // 사용자 class
	private Score m_score; // 사용자 class
	
	public MyClass() {
		this.name = null; //초기화, 안줘도 주고있다.
		this.m_address = null ;
		this.m_score = null;
	}
	
    
	public MyClass(String name, Address address, Score score) {
		this.name = name; //지역변수, 전역변수 구분해야되서 반드시 명시해야한다. 멤버변수 명과 지역변수 명이 동일할 때 구분하려면 반드시 this로 명시해준다.
		m_address = address;
		m_score = score;
	}

	// private -> getter&setter 주자
    
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Address getM_address() {
		return m_address;
	}

	public void setM_address(Address m_address) {
		this.m_address = m_address;
	}

	public Score getM_score() {
		return m_score;
	}

	public void setM_score(Score m_score) {
		this.m_score = m_score;
	}

	@Override
	public String toString() {
		//return String.format("MyClass [name=%s, m_address=%s, m_score=%s]", name, m_address, m_score);
																			//변수명을 호출할때 .toString이 쫒아온다.
		return String.format("MyClass [name=%s, m_address=%s, m_score=%s]", name, this.getM_address(), m_score);
																			// 메소드로 호출한다.
	}
	
	
}

 

 

Q3-1) 멤버를 클래스로 가지는 클래스를 값을 입력해 실행해보자.

 

package com.exam;

public class Test {

public static void main(String[] args) {
	
	MyClass m1 = new MyClass(); 
	System.out.println(m1); // 값을 주지 않았으니 null 반환
	System.out.println();
	
	
	//public MyClass(String name, Address address, Score score)
	System.out.println("==============<1. 주소를 서울시로 수정> =============");
	MyClass m2 = new MyClass("홍길동", new Address("서울시", "02-000-0000"), new Score(90,80,70));
	System.out.println(m2);
	
	
	
	/*
	//m2.getM_address(); //아래랑 같다
	Address r = m2.getM_address();
	r.setAddr("부산시");
	*/
	System.out.println("============= <2. 주소를 부산시로 수정> ============");
	m2.getM_address().setAddr("부산시");
	System.out.println(m2);
	
	
	System.out.println("============ <국어점수를 100점으로 수정> ============");
	m2.getM_score().setKor(100);
	System.out.println(m2);
	System.out.println(m2.getM_score().getKor()); // 국어점수만 리턴
	}
}

MyClass [name=null, m_address=null, m_score=null]

==============<1. 주소를 서울시로 수정> =============
MyClass [name=홍길동, m_address=  서울시 02-000-0000 
, m_score=   90    80    70   240 80.0   B
]
============= <2. 주소를 부산시로 수정> ============
MyClass [name=홍길동, m_address=  부산시 02-000-0000 
, m_score=   90    80    70   240 80.0   B
]
============ <국어점수를 100점으로 수정> ============
MyClass [name=홍길동, m_address=  부산시 02-000-0000 
, m_score=  100    80    70   250 83.3   B
]
100
==============================================================================

 

 

중첩 interface, class 

 

package com.test;

interface IA{
	interface IB{
}
class CC{}
}

 

package com.test;
public class test{
	class n_test { }
	static class s_test{ }
	public static void main(String[] args){}


}

 

 

 

GUI

 

# 첫 프레임 만들기

 

package com.test02;

import java.awt.*;
public class Test01 {

public static void main(String[] args) {
	Frame f1 = new Frame();
	
	
	//f1.setSize(200,400); //pixel 단위로 사이즈 
	f1.setSize(new Dimension(400,200)); // 안나오면 NEW
	
	//f1.setBackground(Color.gray); //static 
	f1.setBackground(new Color(255,175,175));
	
	f1.setTitle("hihihihi");
	
	f1.setVisible(true); // 창 보여주는 메서드
	
	
	System.out.println(f1.getBackground());
	System.out.println(f1.getSize());
	
 }
}

 

 

 

 

 

package com.test02;
import java.awt.*;
public class MyFrame extends Frame{

	Button bt;
	Button bt01;
	
	public MyFrame() { // 기본생성자
		super("재미따내꺼"); // super는 Frame, this는 Myframe
		bt = new Button("버튼");
		bt01 = new Button("버튼2222");
	}

	
	public void go(){ // 사용자 생성자, 여기다 만들자
		
		setBackground(new Color(255,175,175));
		setSize(new Dimension(400,400));
		setVisible(true);
		add(bt,BorderLayout.SOUTH); // 위치지정해주지 않으면 덮어쓴다.
		add(bt01,BorderLayout.NORTH);
		
		
		add(new Button("North"), BorderLayout.NORTH);// 한번만 쓰고버린다.
	    add(new Button("South"), BorderLayout.SOUTH);
	    add(new Button("East"), BorderLayout.EAST);
	    add(new Button("West"), BorderLayout.WEST);

	    setLayout(new GridLayout(3, 1));
	    add(new Checkbox("one", null, true));
	    add(new Checkbox("two"));
	    add(new Checkbox("three"));
	    
	    

	}
	
	public static void main(String[] args) {
		//new MyFrame().go();
		
		MyFrame m = new MyFrame();
		m.go();
		System.out.println(m.getTitle()); // Frame(String title)
		System.out.println(m.getLayout()); // borderlayout 으로 배치를 하는구나라고 생각! (사이즈조절안된다)
		
	}
}

 

 

 

 

 

package com.test02;

import java.awt.*;

public class MyFrame02 extends Frame {

	
	Panel p1,p2;
	Button bt1, bt2;
	
	public MyFrame02() {
		p1 = new Panel();
		p2 = new Panel();
		
		bt1 = new Button("111");
		bt2 = new Button("222");
		}
		
	public void go(){
	
		////////p1
	p1.add(bt1);
	////////////p2
	p2.add(bt2);
		
	//////////frame
	setLayout(new GridLayout(2,1));
	add(p1);
	add(p2);
	setSize(500,500);
	setVisible(true);
	
	}
public static void main(String[] args) {
	new MyFrame02().go();
}
}

 

 

 

 

# 버튼구현

 

package com.test02; 

 import java.awt.Button;
 import java.awt.*;
 import java.util.*;
 import java.applet.Applet;

 public class Test02 extends Frame {

     protected void makebutton(String name,
                               GridBagLayout gridbag,
                               GridBagConstraints c) {
         Button button = new Button(name);
         gridbag.setConstraints(button, c);
         add(button);
     }

     public void init() {
         GridBagLayout gridbag = new GridBagLayout();
         GridBagConstraints c = new GridBagConstraints();

         setFont(new Font("SansSerif", Font.PLAIN, 14));
         setLayout(gridbag);

         c.fill = GridBagConstraints.BOTH;
         c.weightx = 1.0;
         makebutton("Button1", gridbag, c);
         makebutton("Button2", gridbag, c);
         makebutton("Button3", gridbag, c);

         c.gridwidth = GridBagConstraints.REMAINDER; //end row
         makebutton("Button4", gridbag, c);

         c.weightx = 0.0;                //reset to the default
         makebutton("Button5", gridbag, c); //another row

         c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
         makebutton("Button6", gridbag, c);

         c.gridwidth = GridBagConstraints.REMAINDER; //end row
         makebutton("Button7", gridbag, c);

         c.gridwidth = 1;                //reset to the default
         c.gridheight = 2;
         c.weighty = 1.0;
         makebutton("Button8", gridbag, c);

         c.weighty = 0.0;                //reset to the default
         c.gridwidth = GridBagConstraints.REMAINDER; //end row
         c.gridheight = 1;               //reset to the default
         makebutton("Button9", gridbag, c);
         makebutton("Button10", gridbag, c);

         setSize(300, 100);

         pack();
         setSize(getPreferredSize());
         setVisible(true);
     }
     
     
     public static void main(String args[]) {
         
         Test02 ex1 = new Test02();
         ex1.init();


 }}

 

 

 

 

 

# 인터페이스를 implements 이벤트 적용방법 

 

package com.test03;

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

//case1 : 인터페이스를 implements 하는 이벤트 적용 방법
public class MyFrame extends Frame implements WindowListener{
	Panel p1;
	Button bt;
	

	public MyFrame() {
		super("내꺼");
		p1 = new Panel();
		bt = new Button("궁서");
				
	}
	
	public void go(){
		///레이아웃///
		setFont(new Font("바탕",Font.BOLD,30));
		p1.add(bt);
		add(p1);
		
		// 이벤트 구현 = listener
		// 1. 대상의(frame, button) add ** listener 을 찾는다. 
		// 2. () 괄호 안의 매개인자를 통해서 해당 이벤트에 맞는 메소드가 있는지 찾는다.
		// 3. 구현한다
		
		// windowClosed(WindowEvent e)
		addWindowListener(this);
		
		///프레임실행시점
		setSize(400,400);
		setVisible(true);
	}
public static void main(String[] args) {
	new MyFrame().go();

}

      @Override
      public void windowOpened(WindowEvent e) {
          // TODO Auto-generated method stub

      }

      @Override
      public void windowClosing(WindowEvent e) {
          // TODO Auto-generated method stub
          System.out.println("windowClosing");
          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) {


      }}

 

 

# 윈도우 이벤트 인터페이스 익명으로 재정의 하는 방법

 

package com.test03;

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
//case 2 : 윈도우 이벤트 인터페이스 익명으로 재정의 하는 방법

public class MyFrame02 extends Frame{
	Panel p1;
	Button bt;
	

	public MyFrame02() {
		super("내꺼");
		p1 = new Panel();
		bt = new Button("궁서");
				
	}
	
	public void go(){
		///레이아웃///
		setFont(new Font("바탕",Font.BOLD,30));
		p1.add(bt);
		add(p1);
		
		// 이벤트 구현 = listener
		addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
			System.exit(0);
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
		///프레임실행시점
		setSize(400,400);
		setVisible(true);
	}
public static void main(String[] args) {
	new MyFrame02().go();

}}

 

 

# 추상클래스 익명으로 정의하는 방법, 계산기를 만들어보자.

 

package com.test03;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import com.mytest.*;
// case3 : 추상클래스 익명으로 정의하는 방법, 계산기를 만들어보자.

public class MyFrame03 extends Frame{
	Frame f = new Frame("My_Frame");
	Panel p1,p2,p3,p4;
	Label lbl_a, lbl_b, lbl_r;
	TextField txt_a, txt_b, txt_result;
	CheckboxGroup cbg ;
	Checkbox b1,b2,b3,b4;
	Button bt;
	Calc my_calc;
	
	
	public MyFrame03() {
		super("내꺼");
		
		my_calc = new Calc(); // 초기화
		
		lbl_a = new Label("A :");
		lbl_b = new Label("B :");
		lbl_r = new Label("Result");
		
		p1 = new Panel();
		p2 = new Panel();
		p3 = new Panel();
		p4 = new Panel();
		
		cbg = new CheckboxGroup();
		b1 = new Checkbox("+",cbg,false);
		b2 = new Checkbox("-",cbg,false);
		b3 = new Checkbox("*",cbg,false);
		b4 = new Checkbox("/",cbg,false);
		
		txt_a = new TextField(20);
		txt_b = new TextField(20);
		txt_result = new TextField(20);
		
		bt = new Button("OK!");
		
	}
	
	public void go(){
		f.setTitle("My_Frame");
		///레이아웃///
		setFont(new Font("바탕",Font.BOLD,20));
		setLayout(new GridLayout(4,1));
		setBackground(new Color(255,175,175));
		
		add(lbl_a);
		add(lbl_b);
		////p1
		p1.add(lbl_a);
		p1.add(txt_a);
		
		////p2
		p2.add(lbl_b);
		p2.add(txt_b);
		
		/// p3
		
		p3.add(b1);
		p3.add(b2);
		p3.add(b3);
		p3.add(b4);
		p3.add(bt);
		
		///p4
		p4.add(lbl_r);
		p4.add(txt_result);
		
		//이벤트
		addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}});
		
	bt.addActionListener(new MyEvent());
		//프레임실행
		add(p1);
		add(p2);
		add(p3);
		add(p4);
		

		setSize(400,400);
		setVisible(true);
	}
		

	class MyEvent implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
//			System.out.println(toString());
//			System.out.println(e.getActionCommand() + ":");
//			System.out.println(e.paramString());
//			if(e.paramString().equals("OK!")){ //ok로 같다면 get Action!
//				System.out.println("클릭했어");
			
			int a = Integer.parseInt(txt_a.getText());
			int b = Integer.parseInt(txt_b.getText());
			
			my_calc.setA(a);
			my_calc.setB(b);
			
			if(b1.getState()) {
				String res = String.valueOf(my_calc.getHap());
				txt_result.setText(res);
			}
			
			if(b2.getState()) {
				String res = String.valueOf(my_calc.getSub());
				txt_result.setText(res);
			}
			
			if(b3.getState()) {
				String res = String.valueOf(my_calc.getMul());
				txt_result.setText(res);
			}
			
			if(b4.getState()) {
				my_calc.setA(b); // 나누기일때 변경해서 입력하기!
				my_calc.setB(a);
				String res = String.valueOf(my_calc.getDiv());
				txt_result.setText(res);
			}
			
			System.out.println(b1.getState());
			
			}
		}
	
	


public static void main(String[] args) {
	new MyFrame03().go();

}}

 

 

 

 

 

# 이너클래스로 처리할 수 있다. (swing) 이용

 

package com.test03;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
//case 4. 이너클래스로 처리할 수 있다.
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame04 extends JFrame{
	Panel p1;
	JButton bt;
	

	public MyFrame04() {
		super("내꺼");
		p1 = new Panel();
		bt = new JButton("궁서");
				
	}
	
	public void go(){
		///레이아웃///
		setFont(new Font("바탕",Font.BOLD,30));
		p1.add(bt);
		add(p1);
		addWindowListener(new MyEvent());
		
		// 버튼의 이벤트
		bt.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("버튼클릭했엉");
				
			}
		});
		
		///프레임실행시점
		setSize(400,400);
		setVisible(true);
	}
	
	class MyEvent extends WindowAdapter{

		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
		
	}
public static void main(String[] args) {
	new MyFrame04().go();

}}

 

 

 

'|Playdata_study > Java' 카테고리의 다른 글

210705_Java (Thread/Socket)  (0) 2021.07.05
210702_Java (Collection, 이클립스-db연결)  (0) 2021.07.02
210630_Java (File class(io.package))  (0) 2021.07.01
210629_Java (class, Interfaces)  (0) 2021.06.29
210628_Java (package, class)  (0) 2021.06.28

댓글