728x90
반응형

작업 순서


1. 컨테이너 객체 생성

 

    - 컨테이너 객체 생성하기
        ① JFrame 상속을 이용한 방법        

import javax.swing.JFrame; 

public class Test extends JFrame{
	public Test(){
    	super("테스트");
    }
    
    public static void main(String[] args){
    	new Test();
    }
}

        ② 상속 받지 않고 객체 생성하기

import javax.swing.JFrame; 

public class Test{
	public static void main(String[] args){
    	JFrame mainFrame = new JFrame("테스트");
    }
}

        ③ JFrame 상속 받은 클래스 작성하고, 실행용 클래스가 실행

import javax.swing.JFrame;

public class Test1 extends JFrame{
	public Test1(){}
}

class Test2{
	public static void main(String[] args) {
		new Test1();
	}
}

 

    - 컨테이너 세부 속성 지정

메소드

설명

setLocation(int x, int y)

프레임 위치 설정

setSize(int width, int height)

프레임 사이즈 설정

setBounds(int x, int y, int width, int height)

프레임 위치와 사이즈 설정

setTitle(String title)

프레임 제목 설정

setIconImage(IconImage)

프레임 아이콘 이미지 설정

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

프레임 닫기 버튼 활성화

setVisiable(true)

프레임 보이기

setResizavble(true)

프레임 사이즈 조정 활성화

 

2. 배치 방식을 컨테이너에 셋팅함(레이아웃 설정)

 

    - 컨테이너 배치 방식 지정

        ① BorderLayout(기본)

            모두 5개 영역으로 나누고, 각 영역에 하나의 컴포넌트를 넣을 수 있음

            한 영역에 하나 이상의 컴포넌트를 넣고 싶으면 Panel을 사용

예시 이미지

setBounds(x, y, width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
//JFrame의 기본 LayoutManager객체는 BorderLayout
//setLayout(new BorderLayout());  //따로 안만들어줘도 기본적으로 생성됨
JButton north = new JButton("북");
JButton south = new JButton("남");
JButton east = new JButton("동");
JButton west = new JButton("서");
JButton center = new JButton("가운데");
		
//프레임에 추가
add(north, BorderLayout.NORTH);
add(south, BorderLayout.SOUTH);
add(east, BorderLayout.EAST);
add(west, BorderLayout.WEST);
add(center, BorderLayout.CENTER);  //기본값

        ② FlowLayout

            컴포넌트를 워드프로세서와 같은 방식, 즉 왼쪽에서 오른쪽으로 배치

            3가지 정렬 방식(왼쪽, 가운데, 오른쪽)이 가능함

예시 이미지

private void init() {
		JFrame f = new JFrame();
		f.setBounds(200,200,500,500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//JPanel추가
		JPanel panel = new JPanel();
		panel.setBackground(Color.orange);
		
		//JPanel의 기본 LayoutManager : FlowLayoutManager
		panel.setLayout(new FlowLayout(FlowLayout.LEFT));  //기본값이기에 생략해도 같음
		for(int i=0; i<20; i++) {
			JButton btn = new JButton(String.valueOf(i+1));  //정수형을 받는 컴포넌트가 없음
			panel.add(btn);
		}
		
		f.add(panel);  //기본값 center
		
		f.setVisible(true);
}

        ③ GridLayout

            컴포넌트들을 가로, 세로의 일정 수만큼 배치하고자 할 때 주로 사용

            행과 열을 지정하고, 각 컴포넌트는 동일한 사이즈를 가짐

예시 이미지

public class GridLayoutTest extends JFrame{
	
	public GridLayoutTest(int x, int y, int w, int h) {
		setBounds(x, y, w, h);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new GridLayout(3,4,5,5)); //gap을 줌 (5,5)
		
		for(int i=1; i<13; i++) {
			JPanel panel = new JPanel();
			JLabel label = new JLabel(String.valueOf(i));
			panel.setBackground(Color.gray);
			panel.add(label);
			add(panel);
		}
	}
	
	public static void main(String[] args) {
		new GridLayoutTest(100,100,500,500).setVisible(true);
	}
}

        ④ CardLayout

            여러 컨테이너를 슬라이드처럼 바꿔가며 보여줄 수 있음

            앨범이나 퀴즈 또는 설치 프로그램에 주로 사용됨

이미지 예시

public class CardLayoutTest extends JFrame {
	//Listener클래스에서 접근할 수 있도록 필드로 선언함
	private CardLayout cardLayout;

	public CardLayoutTest() {  //패널 교체해서 보여줌
		setBounds(200,200,200,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//CardLayout 설정
		cardLayout = new CardLayout();
		setLayout(cardLayout);
	
		//패널 생성
		JPanel card1 = new JPanel();
		JPanel card2 = new JPanel();
		JPanel card3 = new JPanel();
		
		card1.setBackground(Color.orange);
		card2.setBackground(Color.darkGray);
		card3.setBackground(Color.green);
	
		JLabel label1 = new JLabel("card1");
		JLabel label2 = new JLabel("card2");
		JLabel label3 = new JLabel("card3");
		
		card1.add(label1);	//라벨 추가
		card2.add(label2);
		card3.add(label3);
		
		//각 패널에 이벤트 리스너 객체 바인딩 (번거로워도 다 연결해야 작동함)
		MouseListener listener = new MyMouseListener();
		card1.addMouseListener(listener);
		card2.addMouseListener(listener);
		card3.addMouseListener(listener);
		
		add(card1);  //현재 프레임에 추가
		add(card2);
		add(card3);
	}
    
	//interface가 수많은 메소드 구현을 강제화 하고 있어서 추상메소드를 다 구현하지 않아도 손쉽게 이용할 수 있도록 중간에 AdapterClass(추상메소드를 다 구현만 해놓은 클래스)를 사용하여 원하는 메소드만 구현 가능
	public class MyMouseListener extends MouseAdapter {  
		
		@Override
		public void mouseClicked(MouseEvent e) {
			//부모 컨테이너 객체 가져오기
			Object src = e.getSource(); //이벤트가 발생한 객체 panel1, panel2
			Container parent = ((JPanel)src).getParent();
			
			//좌클릭한 경우
			if(e.getButton() == MouseEvent.BUTTON1) {
				cardLayout.next(parent);
			}
			
			//우클릭한 경우
			else if(e.getButton() == MouseEvent.BUTTON3) {
				cardLayout.previous(parent);
			}
		}
	}
	
	public static void main(String[] args) {
		new CardLayoutTest().setVisible(true);
	}
}

        ⑤ GridbagLayout

            컴포넌트의 위치와 크기를 자유롭게 만들 수 있음

            사용하기 매우 복잡함

 

3. 컴포넌트 객체 생성

 

    - 컴포넌트 종류

컴포넌트 종류

설명

AbstractButton

버튼과 연관된 클래스들의 상위 추상 클래스

ButtonGroup

버튼을 그룹화 하기 위한 클래스

ImageIcon

이미지를 아이콘으로 캡슐화하여 제공하는 클래스

JApplet

애플릿(applet)의 스윙버젼으로 Applet 클래스로부터 상속된 클래스

JButton

스윙에서 사용하는 버튼 클래스

JCheckBox

스윙에서 사용하는 체크박스 클래스

JCheckBoxMenuItem

스윙의 메뉴에서 사용하는 체크박스 클래스

JComboBox

풀다운 리스트를 보여줄 수 있는 콤보박스 클래스

JComponent

모든 스윙 컴포넌트의 상위 클래스

JLabel

스윙에서 사용하는 라벨 클래스

JMenu

스윙의 메뉴에서 사용하는 메뉴 클래스

JMenuBar

스윙의 메뉴바를 만들기 위한 클래스

JMenuItem

스윙에서 사용하는 메뉴관련 클래스의 상위 클래스

JPanel

스윙에서 사용하는 패널 클래스

JRadioButton

스윙에서 사용하는 라디오버튼 클래스

JRadioButtonMenuItem

스윙의 메뉴에서 사용하는 라디오버튼 클래스

JScrollPane

스크롤 윈도우를 나타내는 클래스

JTabbedPane

그룹을 홀더 형태로 제공하는 윈도우를 나타내는 클래스

JTable

데이터를 행과 열로 나타내는 클래스

JTextComponent

스윙에서 사용하는 텍스트 관련 클래스들의 상위 클래스

JTextField

스윙에서 사용하는 텍스트 필드 클래스

JToggleButton

JCheckBox 클래스와 JRadioButton 클래스의 상위 클래스

JTree

트리 형태를 나타내는 클래스

4. 지정된 배치 방식에 따라 컨테이너에 컴포넌트 배치함
5. 컴포넌트에 마우스나 키보드 반응에 대한 이벤트 처리함

반응형
복사했습니다!