이안의 평일코딩

JAVA의 정석 25일차 - Layout 본문

Back-end/Java

JAVA의 정석 25일차 - Layout

이안92 2020. 7. 17. 10:50
반응형

2020.07.17(금)

1. 클래스 종류

   1) 일반클래스 (핵심)

      형식)

            public class className {

                멤버변수, 공유변수

                생성자

                메소드

              }

 

              (1) 데이터형으로만 사용

                    => 필요한 데이터를 모아서 관리 (캡슐화) => 데이터를 은닉화 메소드를 통해 접근

                                                                                       private        getter/setter

              (2) 액션 ==> 기능만 가지고 있다 =(메소드)

              (3) 변수 + 메소드 = 혼합

 

   ===============

   2) 추상클래스

      public abstract class className {

           멤버변수 / 공유변수

           구현이 안된 메소드 => 미완성 클래스

           구현이 된 메소드

      }

 

      (1) 자신이 메모리 할당이 불가능

      (2) 생성 ==> 상속받은 클래스를 통해서 메모리에 저장

      (3) 단일 상속

      (4) 상속을 받은 클래스는 반드시 구현이 안된 메소드를 구현해서 사용

      (5) 여러개 클래스가 있는 경우 => 공통으로 적용된 메소드가 있는 경우에 추상클래스 제작

      (6) 구분 => 메모리할당시 => 클래스선언 => 생성자

          A a = new A() 일반클래스 생성자와 동일

          A a = new B() 추상클래스 생성자다름

      (7) 메소드 구현이 애매한 경우 (경우의 수가 많다)

          예) 먹는다()

               개, 소, 돼지, 말

          예) 버튼 클릭()

      (8) 기본 틀이 제작 => 구현이 쉽다

      (9) 요구사항 분석

 

  3) 인터페이스 : 웹프로그램

      (1) 추상클래스의 일종

      (2) 다중 상속

      (3) 형식)

          public interface interfaceName {

                 변수 : 상수형 변수 ==> public final static 데이터형 = 값

                                                 생략시에는 자동으로 추가(private, protected는 사용금지)

                 메소드 : 구현이 안된 메소드만 가지고 있다 => 구현해야 사용 가능

          }

                 *** JDK1.8이상 ==> default ==> 구현된 메소드 작성

                 *** 실무 : JDK1.7 , 오라클 : 11g , 스프링 : 3.7~8      

         

      (4) 인터페이스 => 클래스 (상위 클래스) => 상속을 내려야 사용이 가능

         * 인터페이스는 클래스로부터 상속 받을 수 없다

         * 인터페이스 => 인터페이스 extends

         * 인터페이스 => 클래스 implements

         예)

             interface A

             interface B extends A

 

             interface A

             class B implements A

             =======================다중상속

             interface A

             class B

             class C extends B implements A

 

             interface A

             interface B

             class C implements A, B

         => 여러개의 관련이 없는 클래스를 연결해서 사용하는 프로그램

         => 결합성(다른 클래스 영향?)이 낮은 프로그램을 만들 경우에 주로 사용 (스프링)

              스프링 ==> 인터페이스 기반

 

   ===============2)3) 관련된 클래스가 여러개 => 묶어서 사용(통합)

                                  = 데이터베이스 연결

                                  = 웹프로그램 (MVC)

  4) 내부클래스 : 어플리케이션

       = 멤버클래스 : 두개이상의 클래스에서 한개의 데이터 공유할 경우

                           네트워크 프로그램, 쓰레드 프로그램, 빅데이터

          class A {

              O, X, K

          }

          class B {

              A a = new A(); //메모리할당

              a.O , a.X , a.K

          }

 

          ==> B b = new B();

                 B b1 = new B(); b와 b1 둘은 갖고있는 값이 다르게 됨

 

        class A {

           O, K, X

           class B { //멤버클래스 A클래스, B클래스 공통적으로 써야되는 데이터가 있을 때 사용

           }

         }

 

    5) 익명의클래스(포함) : 상속없이 => 오버라이딩 (윈도우 클래스)

      class A {

      }

      class B {

      }

      class C extends A,B { ==> error

      }

 

      class C extends A {

         B b = new B() {

             오버라이딩이 가능하다

         }

       }

 

     내부 클래스

     class A {

        class B {

           class C {

           }

        }

      }

     A.B.C

      ==> B b = new B(); => 사용할 수 없다

 

     class C {

       B b = new B(); (X)

       A.B b; (A클래스 밑 B클래스 가져와라)

     }

 

* 미리 색상을 채워넣고 사이즈 블록을 맞추면 편함(주석처리 된부분 참고)

ClientMainFrame

package com.sist.client;
// 윈도우 => JFrame
// 윈도우와 관련된 클래스를 읽어온다

import javax.swing.*;
import java.awt.*; //Color, Layout
import java.awt.event.*; //interface
/*
 * 재사용
 *  = 상속 (is-a) : 기존의 클래스를 변경해서 사용
 *    public class ClientMainFrame extends JFrame
 *                 ==============> JFrame의 기능을 전체 가지고 온다
 *    class A {
 *      O X W
 *    }
 *    class B extends A {
 *      O X W
 *    }
 *  = 포함 (has-a) : 기존의 클래스를 변경없이 사용
 *  public class ClientMainFrame {
 *      JFrame f = new JFrame();
 *  }
 */
public class ClientMainFrame extends JFrame implements ActionListener{
	JLabel title = new JLabel("레시피 & 맛집 추천사이트", JLabel.CENTER);
	MenuForm mf = new MenuForm();
	ChatForm cf = new ChatForm();
	ControllPanel cp = new ControllPanel();
	
	// 윈도우 크기 결정 => 생성자에서 사용
	public ClientMainFrame() {
		/*
		 * 클래스에서 생성자 사용 => 선언이 아니라 => 구현할 때
		 * 예)
		 *    데이터베이스 : 오라클연결
		 *    네트워크 : 셋팅 => IP, PORT => 핸드폰 (개통)
		 *    웹 : 쿠키에서 값읽기 => 자동로그인
		 */
		title.setFont(new Font("굴림체", Font.BOLD, 55));
		//title.setOpaque(true); // 불투명
		//title.setBackground(Color.magenta);
		setLayout(null); // JFrame (BorderLayout) 사용자 정의로 배치 => null
		title.setBounds(10, 15, 1570, 100);
		// 추가 => add()
		add(title);
		// 메뉴 배치
		mf.setBounds(10, 120, 100, 400);
		add(mf);
		// 채팅폼
		cf.setBounds(115, 760, 1465, 200);
		add(cf);
		// 출력화면
		cp.setBounds(115, 120, 1465, 635);
		add(cp);
		
		setSize(1600, 1000);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE); // X버튼 클릭시 종료
		
		mf.b1.addActionListener(this);
		mf.b2.addActionListener(this);
	}
	public static void main(String[] args) throws Exception{
		// 생성자 위에
		UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
		// 생성자는 호출시에 반드시 => new 생성자();
		new ClientMainFrame();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==mf.b1) {
			cp.card.show(cp, "DF"); //ControllPanel에 이름이 DF인 df =>detailform
		}
		else if(e.getSource()==mf.b2) {
			cp.card.show(cp, "LF"); //LF => listform
		}
		
	}
}

 

MenuForm

package com.sist.client;
import java.awt.*;
import javax.swing.*;

public class MenuForm extends JPanel {
	JButton b1,b2,b3,b4,b5,b6,b7;
	// 버튼 초기화 => 배치 (생성자)
	public MenuForm() {
		//setBackground(Color.orange);
		b1 = new JButton("홈");
		b2 = new JButton("레시피");
		b3 = new JButton("랭킹");
		b4 = new JButton("추천");
		b5 = new JButton("셰프");
		b6 = new JButton("맛집");
		b7 = new JButton("종료");
		
		setLayout(new GridLayout(7,1,5,5)); //레이아웃 디폴트 flowLayout 패널 가로로
		add(b1);add(b2);add(b3);add(b4);add(b5);add(b6);add(b7);
	}
}

 

ChatForm

package com.sist.client;
import java.awt.Color;
import javax.swing.*;

public class ChatForm extends JPanel{
	
	public ChatForm() {
		//setBackground(Color.yellow);
	}
}

 채팅창

package com.sist.client;
import java.awt.Color;

import javax.swing.*;
import javax.swing.table.*;

public class ChatForm extends JPanel{
	JTextArea ta;
	JTextField tf;
	JComboBox box;
	JTable table;
	DefaultTableModel model;
	JButton b1,b2;
	
	public ChatForm() {
		//setBackground(Color.yellow);
		setLayout(null);
		ta = new JTextArea(); //텍스트창
		JScrollPane js = new JScrollPane(ta); //스크롤바
		js.setBounds(10, 15, 850, 140);
		add(js);
		tf = new JTextField(); //텍스트줄
		tf.setBounds(10, 160, 740, 30);
		add(tf);
		
		box = new JComboBox(); //선택박스
		box.addItem("black");
		box.addItem("red");
		box.addItem("blue");
		box.addItem("green");
		box.addItem("gray");
		box.addItem("yellow");
		box.addItem("cyan");
		
		box.setBounds(755, 160, 105, 30);
		add(box);
		
		//테이블
		String[] col = {"ID", "대화명", "성별"};
		String[][] row = new String[0][3];
		model = new DefaultTableModel(row, col);
		table = new JTable(model);
		JScrollPane js1 = new JScrollPane(table);
		js1.setBounds(865, 15, 500, 140);
		add(js1);
		
		//버튼
		JPanel p = new JPanel();
		b1 = new JButton("정보보기");
		b2 = new JButton("쪽지보내기");
		p.add(b1);p.add(b2);
		p.setBounds(865, 160, 500, 35);
		add(p);
	}
}

 

 

ControllPanel

package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class ControllPanel extends JPanel{
	CardLayout card = new CardLayout();
	ListForm lf = new ListForm();
	DetailForm df = new DetailForm();
	//변경되는 화면은 컨트롤 패널 가지고있어야함
	public ControllPanel() {
		setLayout(card);
		add("LF",lf);
		add("DF",df);
	}
}

 

ListForm

package com.sist.client;
import java.awt.Color;
import javax.swing.*;

public class ListForm extends JPanel{
	public ListForm() {
		//setBackground(Color.pink);
	}
	
}

 

DetailForm

package com.sist.client;
import java.awt.Color;
import javax.swing.*;

public class DetailForm extends JPanel{
	public DetailForm() {
		//setBackground(Color.cyan);
	}
}

 

반응형
Comments