toggle menu

JAVA 정리 - GUI 구현

2012.07.30 09:23 JAVA

awt
awt는 해당 운영체제의 특징을 따라 화면 구성을 하게 됨. 따라서 운영체제에 따라 느낌이 다르다. 
java.awt.*
(예) Button, Frame, TextField ...


swing
swing은 자바 영역에서 사용하는 look&feel 을 적용 받아 모든 운영체제에서 동일한 느낌을 제공.
javax.swing.*
(예) JButton, JFrame, JTextField ...

화면 구성을 두 가지를 섞어서 할 수 있음.


용어정리
① Container
자바에서 Container는 창의 역할을 한다.
한 개 이상의 Container 위에 Component들이 올려질 영역
Container는 실제로 Component보다 작은 개념이다.
(예) Frame, Window, Panel, Dialog, Applet

② Component
실제로 Container 위에 올려져서 화면 구성을 담당하는 요소들!
(예) Button, TextField, TextArea, List, ...

③ LayoutManager
Container 위에 Component들을 올릴 때 자리 배치 방법
(예) FlowLayout, BorderLayout , GridLayout , CardLayout , GridBackLayout ...



상속을 받을 때는 많이 사용하는 요소를 상속 받는 것이 좋음.

화면 생성은 프로그램 초기에 이루어져야 하므로 주로 생성자에서 작업이 이루어짐.



//Container 위에 Component 추가 방법
프레임.add(Component component);

//크기 지정
프레임.setSize(int x, int y);

//Container 보이기
프레임.setVisible(Boolean b);




간단한 프레임 예제
import java.awt.Button;
import java.awt.Frame;
public class FrameExam
{
	Frame frame = new Frame("ㅎㅎㅎ");
	Button button = new Button("ㅋㅋㅋ");
	
	public void createFrame()
	{
		//프레임에 컴포넌트 추가
		frame.add(button);
		
		//프레임 크기 지정
		frame.setSize(300, 600);
		
		//프레임 보이기
		frame.setVisible(true);
	}

	public static void main(String[] args)
	{
		//프레임 열기
		FrameExam frameExam = new FrameExam();
		frameExam.createFrame();
	}
}




간단한 J프레임 예제
import javax.swing.JButton;
import javax.swing.JFrame;

public class FrameExam
{
	JFrame frame = new JFrame("ㅎㅎㅎ");
	JButton button = new JButton("ㅋㅋㅋ");
	
	public void createFrame()
	{
		//프레임에 컴포넌트 추가
		frame.add(button);
		
		//프레임 크기 지정	
		frame.setSize(300, 600);

		//프레임 보이기
		frame.setVisible(true);

		//swing에만 있는 X버튼 클릭시 종료
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args)
	{
		//프레임 열기
		FrameExam frameExam = new FrameExam();
		frameExam.createFrame();
	}
}



컴포넌트 레이아웃 변경 방법
ㅁ.setLayout(LayoutManager lm);

FlowLayout
기본적으로 컴포넌트들이 왼쪽에서 오른쪽으로 추가되는 형태
Container의 크기가 변경되면 컴포넌트크기는 고정되고 위치는 변한다.
기본적으로 가운데 정렬!
(예) Panel, Applet

import java.awt.FlowLayout;

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

public class ButtonThree extends JFrame
{
	JButton b1 = new JButton("1");
	JButton b2 = new JButton("2");
	JButton b3 = new JButton("3");
	

	public ButtonThree()
	{
		//제목 설정
		super("제목은 여기에!!");
		
		//레이아웃 설정
		this.setLayout(new FlowLayout());
		
		//버튼 추가
		this.add(b1);
		this.add(b2);
		this.add(b3);
		
		//프레임 크기 지정
		this.setSize(300, 400);
		
		//프레임 보이도록 설정
		this.setVisible(true);
		
		//X버튼 눌렀을 때 닫히도록 설정
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args)
	{
		//실행
		new ButtonThree();
	}

}






BorderLayout
기본적으로 컴포넌트들이 틀 형태로 존재
BorderLayout 에 컴포넌트를 추가할 때는 
ㅁ.add(컴포넌트, 위치); //위치 지정을 안하면 기본적으로 CENTER에 위치.
위치에 들어갈 수 있는 값은  BorderLayout.NORTH .... "North" ....

(예) Frame, Dialog
 
import java.awt.BorderLayout;
import java.awt.Container;

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

public class BorderLayoutExam
{
	//컴포넌트 생성
	JFrame jFrame = new JFrame("제목ㅋㅋ");
	JButton btn1 = new JButton("1번버튼");
	JButton btn2 = new JButton("2번버튼");
	JButton btn3 = new JButton("3번버튼");
	JButton btn4 = new JButton("4번버튼");
	JButton btn5 = new JButton("5번버튼");
	
	public BorderLayoutExam()
	{
		//컴포넌트를 넣을 컨테이너 구하기
		Container container = jFrame.getContentPane();
		
		//컴포넌트를 컨테이너에 추가
		container.add(btn1, BorderLayout.NORTH);
		container.add(btn2, BorderLayout.EAST);
		container.add(btn3, BorderLayout.WEST);
		container.add(btn4, BorderLayout.SOUTH);
		container.add(btn5, BorderLayout.CENTER);
		
		//프레임 크기 지정
		jFrame.setSize(300, 300);
		
		//프레임 보이기 설정
		jFrame.setVisible(true);
		
		//종료 버튼 설정
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args)
	{
		//실행
		new BorderLayoutExam();
	}

}





GridLayout
테이블 형태의 레이아웃
이 레이아웃을 디폴트로 가지는 컴포넌트는 없음.

인수를 주지 않으면 행은 1행으로 고정되고 열이 계속 추가된다.
행/열 인수에 0이 들어갈 수 있는데, 예를들어 (2, 0) 이면 행은 2행으로 고정하고 열은 무한대로 늘어날 수 있다는 의미이다.


import java.awt.Container;
import java.awt.GridLayout;

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

public class GridLayoutExam
{
	JFrame jFrame = new JFrame("이번엔 GridLayout이다!!");
	JButton [] btn = new JButton [6]; //6개 생성
	
	public GridLayoutExam()
    {
		//GridLayout 적용
		jFrame.setLayout(new GridLayout(3,2));
		
		//컨테이너 가져오기
		Container container = jFrame.getContentPane();
		
		//컴포넌트 생성 및 추가하기
		for(int i=0; i < btn.length; i++)
		{
			btn[i] = new JButton(i+"버튼");
			container.add(btn[i]);
		}
		
		//프레임 크기 지정하기
		jFrame.setSize(300,300);
		
		//프레임 보이기
		jFrame.setVisible(true);
		
		//종료버튼에 대한 설정
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 
    }

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

}





구체적인 위치 지정하기
setLayout에는 null로
setBounds 로 직접적인 좌표값을 지정할 수 있다. 



복합적인 레이아웃 설정하기
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CompositeLayout
{
	JFrame jFrame = new JFrame(); //전체적인 프레임
	JPanel jpanel = new JPanel(); //상단에 들어갈 패널
	JButton [] btn = new JButton[4]; //버튼

	public CompositeLayout()
	{
		//버튼 생성
		for(int i=0; i<btn.length; i++)
		{
			btn[i] = new JButton(i+"번째 버튼");
		}

		//패널에 버튼 추가
		jpanel.add(btn[0]);
		jpanel.add(btn[1]);
		
		jFrame.add(jpanel, "North"); //패널 추가
		jFrame.add(btn[2], "West");
		jFrame.add(btn[3], "Center");
		
		//사이즈 및 보여짐 여부 설정
		jFrame.setSize(300,300);
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}


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

	}

}


텍스트 컴포넌트
//텍스트 입력
 JTextField text = new JTextField("이름입력주세요.", 가로길이 - FlowLayout에서 의미가 있음);

//스크롤바가 기본적으로 있는 AWT 텍스트 필드
TextArea textArea = new TextArea(); //스크롤바 기본 있음.

//Swing에서의 텍스트 영역.. 스크롤바가 존재하지 않는다. 
JTextArea textArea = new JTextArea("내용 입력하세요.", 5,10);//스크롤바 없음

//Swing에서 스크롤바를 넣기 위해 아래와 같이 사용한다.
JScrollPane jp  = new JScrollPane(textArea);//스클롤바 만들기

//패스워드를 위한 필드
JPasswordField pwd = new JPasswordField();


체크박스 컴포넌트
//취미(멀티선택)
Checkbox hobby1 = new Checkbox("수영");
Checkbox hobby2 = new Checkbox("등산", true);
Checkbox hobby3 = new Checkbox("낚시");
Checkbox hobby4 = new Checkbox("놀고먹기", true);

//성별(단일선택)
CheckboxGroup group = new CheckboxGroup();
Checkbox man = new Checkbox("남자" , true, group);
Checkbox woman = new Checkbox("여자" , false, group);


리스트 컴포넌트
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.List;
import java.awt.TextArea;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class ListExam extends JFrame
{

	String ch_item[] =
	{ "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일" };

	// List list = new List(3);//3행으로 보여짐(단일선택)
	List list = new List(4, true);// 4행으로 보여지고 멀티선택가능

	TextArea text = new TextArea(5, 20);// 5행 10열

	public ListExam()
	{
		super("JComboBoxExam 입니다.");
		// 레이아웃 변경
		setLayout(new FlowLayout());

		// List에 항목 추가
		for (String str : ch_item)
			list.add(str);

		// 추가
		super.add(list);
		super.add(text);

		// 크기
		setSize(400, 300);
		// 보여줘
		setVisible(true);
		// x클릭
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

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

	}

}



파일 다이얼로그 컴포넌트
import java.awt.FileDialog;

import javax.swing.JFrame;

public class FileDialogExam extends JFrame
{
	public FileDialogExam()
	{
		FileDialog load = new FileDialog(this, "열기모드");
		FileDialog save = new FileDialog(this, "저장모드", FileDialog.SAVE);

		setSize(500, 400);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		load.setVisible(true); // 파일 불러오기 창 열기
		System.out.println("선택폴더 : " + load.getDirectory());
		System.out.println("선택파일 : " + load.getFile());
		save.setVisible(true); // 파일 저장하기 창 열기
	}

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

	}
}





J다이얼로그 컴포넌트
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

public class JDialogExam
{
	// 필요한 필드 선언
	JFrame jFrame = new JFrame("J다이얼로그 예제");
	JDialog jDialog = new JDialog(jFrame, "JDialog 타이틀");
	JButton jButton = new JButton("Click");

	// GUI 구현 생성자
	public JDialogExam()
	{
		// 다이얼로그에 버튼 추가
		jDialog.add(jButton, "South");

		// 기본 프레임 크기와 보기 설정
		jFrame.setSize(200, 200);
		jFrame.setVisible(true);
		//X버튼 누르면 프로그램 종료
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 다이얼로그의 크기와 보기 설정
		jDialog.setSize(100, 100);
		jDialog.setVisible(true);
		//★X버튼 누르면 다이얼로그만 종료
		jDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

	}

	public static void main(String[] args)
	{
		//실행
		new JDialogExam();
	}

}





JOptionPane 예제
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class JOptionPaneExam extends JFrame
{
	public JOptionPaneExam()
	{
		super("타이틀ㅋㅋ");
		
		//간단한 메시지창
		JOptionPane.showMessageDialog(this, "축하합니다");
		
		//간단한 확인창
		System.out.println(JOptionPane.showConfirmDialog(this, "선택하시겠습니까?"));
		//   Yes : 0
		//    No : 1
		//CANCEL : 2
		
		//사용자 입력창(간단한 입력값 받는 창)
		System.out.println(JOptionPane.showInputDialog(this, "이름은?"));
		
		setSize(500,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args)
	{
		new JOptionPaneExam();

	}
}


메뉴 만들기

JMenuBar : JMenu를 올릴 틀
JMenu : 눌렀을 때 서브가 존재하는 경우
JMenuItem : 바로 실행으로 연결되는 경우

JMenuItem을 JMenu에 add하고, JMenu를 JMenuBar에 add한다.

메뉴는 메뉴만의 자리가 따로 존재한다.
Frame의 North에 들어가는 것이 아니다.

JFrame.setJMenuBar( JMenuBar );


import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class MenuExam
{
	// 프레임 선언
	JFrame jFrame = new JFrame("Menu예제");

	// Swing에서의 텍스트 영역.. 스크롤바가 존재하지 않는다.
	JTextArea textArea = new JTextArea("내용 입력하세요.", 5, 10);// 스크롤바 없음

	// Swing에서 스크롤바를 넣기 위해 아래와 같이 사용한다.
	JScrollPane jp = new JScrollPane(textArea);// 스클롤바 만들기

	// 메뉴 선언
	JMenuBar menuBar = new JMenuBar();
	JMenu fileMenu = new JMenu("파일");
	JMenu helpMenu = new JMenu("Help");

	public MenuExam()
	{
		// 파일 메뉴 생성
		fileMenu.add(new JMenuItem("새 파일"));
fileMenu.getItem(0).setAccelerator (KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK ^ InputEvent.ALT_MASK)); //단축키설정 fileMenu.add(new JMenuItem("열기")); fileMenu.add(new JMenuItem("저장")); fileMenu.addSeparator(); //구분선 추가 fileMenu.add(new JMenuItem("종료")); // 도움 메뉴 생성 helpMenu.add(new JMenuItem("버전")); helpMenu.add(new JMenuItem("정보")); // 메뉴를 메뉴바에 등록 menuBar.add(fileMenu); menuBar.add(helpMenu); // 메뉴바 추가 jFrame.setJMenuBar(menuBar); // 텍스트 영역 추가 jFrame.add(jp, "Center"); // 프레임 크기 지정 jFrame.setSize(300, 300); // 프레임 보이기 jFrame.setVisible(true); // swing에만 있는 X버튼 클릭시 종료 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { // 실행 new MenuExam(); } }





JAVA 관련 포스팅 더보기