- 계산기 GUI 구성하기 - 조원: 박강국 오정은 이귀식 김도윤 안영진
- 차례 - 1. 서론 1.1 용어설명 1.2 사용한 컴포넌트 2. 본론 2.1 설계구조 2.2 소스보기 3. 결론 3.1 결과화면
- 서론 – 1.1 용어설명 GUI (Graphics User Interface) -> 메뉴나 단추를 마우스로 눌러 명령을 내리는데, 이를 그래픽 사용자 인터페이스라 함. AWT (Abstract Windows Toolkit) -> GUI를 구축하기 위한 클래스들의 묶음 컴포넌트(component) -> GUI에서 사용되는 각종 객체들을 의미 컨테이너(Container) -> 컴포넌트를 관리하거나 포함하는 클래스 레이아웃(화면구성)의 속성을 가짐
구조도
1.2 사용한 컴포넌트 Component (implements MenuContainer) +-- Container | +-- Window | | +-- Dialog | | | +-- FileDialog | | +-- Frame (implements MenuContainer) | +-- Panel | +-- ScrollPane +-- Canvas +-- Button +-- CheckBox (implements ItemSelectable) +-- List (implements ItemSelectable) +-- Choice (implements ItemSelectable) +-- Label +-- ScrollBar (implements Adjustable) +-- TextComponent +-- TextField +-- TextArea MenuComponent +-- MenuItem | +-- Menu (implements MenuContainer) | | +-- PopupMenu | +-- CheckboxMenuItem (implements ItemSelectable) +-- MenuBar (implements MenuContainer)
- 설계 구조 - MenuBar Panel Panel Frame
- 본론 – 2.2 소스보기 MyCounter.java import java.applet.*; import java.awt.*; import java.awt.event.* ; //★단축키, 프레임 창닫기를 위한 패키지 public class MyCounter extends Frame { public static void main(String[] args) WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }; //★프레임 창닫기 이벤트 Frame f = new Frame("계산기"); // 프레임 생성 f.addWindowListener(l); //★프레임 창닫기 리스너 // 가운데 정렬, 수평, 수직 간격 f.setLayout(new FlowLayout(FlowLayout.CENTER, 1, 1));
MyCounter.java 메뉴바 추가 MenuBar mb = new MenuBar(); //메뉴바생성 Menu editMenu = new Menu("편집(E)"); //메뉴생성 MenuItem e1 = new MenuItem("복사(C)", new MenuShortcut(KeyEvent.VK_C)); //메뉴아이템생성, 단축키사용 MenuItem e2 = new MenuItem("붙여넣기(P)", new MenuShortcut(KeyEvent.VK_V)); editMenu.add(e1); //메뉴아이템을 메뉴에 추가 editMenu.add(e2); Menu viewMenu = new Menu("보기(V)"); MenuItem v1 = new MenuItem("일반용(T)", new MenuShortcut(KeyEvent.VK_T)); MenuItem v2 = new MenuItem("공학용(S)", new MenuShortcut(KeyEvent.VK_S)); MenuItem v3 = new MenuItem("자리수 구분 단위(I)", new MenuShortcut(KeyEvent.VK_I)); viewMenu.add(v1); viewMenu.add(v2); viewMenu.addSeparator(); //메뉴아이템 사이에 구분선을 추가 viewMenu.add(v3);
MyCounter.java 메뉴바 추가 Menu helpMenu = new Menu("도움말(H)"); MenuItem h1 = new MenuItem("도움말 항목(H)", new MenuShortcut(KeyEvent.VK_H)); MenuItem h2 = new MenuItem("계산기 정보(A)", new MenuShortcut(KeyEvent.VK_A)); helpMenu.add(h1); helpMenu.add(h2); //메뉴를 메뉴바에 추가 mb.add(editMenu); mb.add(viewMenu); mb.add(helpMenu); //메뉴바를 Frame에 추가 f.setMenuBar(mb);
MyCounter.java 텍스트필드 추가 Panel textField = new Panel(); TextField TF = new TextField("0.", 33); // 문자열, 칸수 초기화 TF.setSize(250, 33); textField.add(TF); f.add(textField); BorderLayout.NORTH 로 상단에 추가 Panel northButton = new Panel(); TextField BT = new TextField("",1); BT.setSize(3, 32); BT.setBackground(Color.lightGray); // 텍스트필드 배경색 설정 northButton.add(BT); // 텍스트필드를 northButton 판넬에 추가 northButton.setForeground(Color.red); // 글자색 설정 northButton.add(new Button("Backspace")); northButton.add(new Button(" CE ")); northButton.add(new Button(" C ")); // northButton 판넬을 프레임에 추가 f.add(northButton, BorderLayout.NORTH);
MyCounter.java BorderLayout.WEST로 왼쪽에 추가 String westChar[] = { " MC ", " MR ", " MS ", " M+ " }; Panel westButton = new Panel(); westButton.setBounds(10,109,50,116); // x, y, width, height westButton.setLayout(new GridLayout(4,1,0,4)); //행,열,가로,세로간격 Button westB[] = new Button[westChar.length]; for (int i = 0; i < westChar.length; i++) { westB[i] = new Button(westChar[i]); westB[i].setForeground(Color.red); westButton.add(westB[i]); //버튼을 westButton판넬에 추가 } //westButton판넬을 프레임에 추가 f.add(westButton, BorderLayout.WEST);
MyCounter.java BorderLayout.CENTER로 중앙에 추가 String centerChar[] = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" }; Panel centerPanel = new Panel(); //숫자및 연산 버튼 centerPanel.setBounds(70,109,250,116); // x, y, width, height centerPanel.setLayout(new GridLayout(4,5,4,4)); Button centerButton[] = new Button[centerChar.length]; for (int i = 0; i < centerChar.length; i++) { centerButton[i] = new Button(centerChar[i]); centerButton[i].setForeground(Color.blue); centerPanel.add(centerButton[i]); //버튼을 centerButton판넬에 추가 } //centerButton판넬을 프레임에 추가 f.add(centerPanel, BorderLayout.CENTER); f.setSize(280, 230); // Frame 사이즈 f.setBackground(Color.lightGray); // Frame 배경색 f.setVisible(true); // Frame 나타나게 함
- 결론 – 3.1 결과화면