자바는 AWT와 SWING 패키지를 사용하여 시각적 인터페이스를 않습니다.
먼저, 간단하게이 두 가지 패키지를 살펴 보자 :
자바 AWT와 스윙 비주얼 인터페이스를 만들기 위해 사용된다. AWT (추상 윈도우 툴킷) : 추상 윈도우 툴킷, 초기 쓰기 GUI 응용 프로그램을 포함한. 스윙 : 기존의 문제를 해결하기 위해 새로운 그래픽 인터페이스 패키지를 개발 AWT. 스윙 AWT 개선 및 확장됩니다.
원리
AWT : 유닉스 시스템에 X 창 스타일 동안 Windows 시스템, 윈도우 AWT 윈도우 스타일 그래서 기본 방법을 통해 달성되는 것은, 운영 체제를 호출합니다. 우리는 동료 전화 운영 체제에서 제공하는 AWT 그래픽 기능과 그래픽 기능 사이에 하나의 관계에 대한 하나입니다. 우리는 그래픽 사용자 인터페이스에 AWT 구성 요소를 사용하는 경우 즉, 우리는 도서관 운영 체제가 제공하는 사용 그래픽에 실제로. 때문에 운영 체제 그래픽 라이브러리의 다른 기능에 다른 플랫폼에 존재하지 수있는 플랫폼 기능에 존재하는, 동일하지 않습니다 제공. 자바 언어에 의해 주장 "어디서든 실행, 한번 컴파일"개념을 달성하기 위해, AWT, 즉, AWT 그래픽 기능은 범용 운영 체제를 제공하는 다양한에서 제공하는 자사의 플랫폼 독립적 인 기능의 비용으로 달성되어야한다 교차로 그래픽 기능을 제공합니다. AWT는 그 기능을 달성하기 위해 로컬 방법에 의존하기 때문에, 우리는 일반적으로 헤비급 AWT 컨트롤 컨트롤을했다.
스윙 : 경량 컴포넌트를 호출은, 네이티브 메소드를 통해 달성, 그래서 창 스타일을 스윙하지 않는 것이 더 다양합니다. 그러나 스윙과 heaveyweight 구성 요소가 있었다. 예를 JWindow의, 대화, JFrame의하십시오. 순수 자바, 좋은 휴대 작성 스윙 다른 플랫폼에서 동일하게 본다. 스윙 구성 요소라고 그래서 경량 구성 요소 (스윙은 윈도우 함수는 크로스 플랫폼 및 확장 성 기능이되도록 창 클래스는, 크로스 플랫폼이 될 수 없기 때문에, 따라서 자바 스윙이 문제를 해결, 순수 자바 코드로 작성하고 스윙한다 너무 많은 시스템 리소스, 소위 경량 구성 요소를 차지할 필요가 없습니다!)
차이 :
- AWT는 빠르게 실행 로컬 프로그램을 기반으로 C / C ++ 방법입니다 느리게 실행 스윙 AWT Java 프로그램을 기반으로합니다.
- AWT 컨트롤은 다른 플랫폼에서 다르게 행동 할 수 있으며, 스윙 성능은 모든 플랫폼에서 일치한다.
방법을 선택합니다 :
실제로, 당신은 사용해야 플랫폼 AWT 또는 스윙 응용 프로그램 배포의 유형에 따라 달라집니다. 예를 들면 :
- 임베디드 애플리케이션의 경우, 대상 플랫폼의 하드웨어 자원은 종종 매우 제한되고, 응용 프로그램의 속도는 프로젝트에서 중요한 요소이다. 이 모순 된 상황에서, 간단하고 효율적인 AWT 확실히 임베디드 자바의 첫 번째 선택이된다.
- 일반, 표준 기반의 자바 애플리케이션 PC 또는 워크 스테이션의 핵심 요소는 응용 프로그램의 하드웨어 자원의 한계는 종종 프로젝트에 의해 발생되지 않습니다. 따라서, 인 스윙의 사용을 추진하고 자바의 표준 버전은 속도의 비용으로 응용 프로그램의 기능을 달성했다.
우리는 메인 코스에서 시작이 두 패키지를 이해 한 후, 우리는 간단한 계산기를 달성하기 위해 오늘 쓰기 :
1 수입 하고있는 java.awt. * ; 이 수입 java.awt.event.ActionEvent의; 3 수입 java.awt.event.ActionListener; 4 가져 오기 java.util.Stack의; 5 수입 javax.swing.JApplet; 6 수입 javax.swing.JButton; 7 수입 javax.swing.JFrame; 8 수입 javax.swing.JPanel; 9 수입 javax.swing.JTextField; 10 개 클래스 주요 확장 JApplet에이 구현 {의 ActionListener (11) 개인을= 텍스트 필드 JTextField의 새로운 새 JTextField의 (12 인, "엔터" ) (12)는 문자열 연산자 = ""; // 연산자 (13)는 문자열 INPUT = ""; // 수식 입력 14 부울 플래그 = true로 ] 15 16 공중 공극 초기화 () // 내부 대체 init 메소드 애플릿 . 17 { 18은 textField.setFont ( 새로운 새 상기 폰트 ( "굴림"Font.PLAIN 50)) // 폰트 포맷 설정 . 19 (textField.setEditable 은 false를 ) //는 텍스트 박스가 아닌 집합 변경 (20) 컨테이너 C = getContentPane (); 21 의 JButton B [] = 새로운 JButton의 [17 ]; 22 JPanel의 패널 = 새로운 JPanel의 (); 23 인 JPanel에 Panel1 = 새로운 JPanel의 (); 24 panel1.add (에 textField); 25 panel.setLayout ( 새로운 GridLayout과 (4, 4, 5, 5 )); 26 panel1.setLayout ( 새로운 FlowLayout의 (3 )); 27 C.add (패널 BorderLayout.CENTER); 28 C.add (에 Panel1, BorderLayout.NORTH); (29) 문자열 이름 [] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", ".", "*", "0", "=", "/", "C"}; // 设置按钮 30 대 ( int로 I = 0; I <17; i가 ++) // 添加按钮 31 { 32 (B) [I] = 새 의 JButton (이름 [I]); 33 B [I] .setBackground ( 새로운 컬러 (192, 192, 192 )); 34 B [I] .setForeground (Color.BLACK); B [I] .setFont ( 새로운 새로운 폰트를 ( "굴림"Font.PLAIN, 16)); // 설정 폰트 포맷 (38)이된다 (B는 [I]가) panel.add; // 키 인터페이스에 추가 39 B [I] .addActionListener ( 이 본 ) (40) } (41)이다 panel1.add (B [16 ]); (42)는 [16] .setPreferredSize (B 새로운 새로운 차원 (65, 65 )) (43)가된다 (44)는 45 B [13 ] .setForeground (Color.RED) ; 46이다 } 47 48 공중 공극 의 actionPerformed (ActionEvent를 E) { 49 INT CNT = 0 ; 50 문자열는 actionCommand = e.getActionCommand (); (51)는 IF "-") || actionCommand.equals ( "*")를는 actionCommand를 || (actionCommand.equals ( "+") || actionCommand.equals는 (. 등호 ( "/" )) (52)는 입력 = + ""+는 actionCommand + ""; // 입력, 원하는 형상으로 입력 패턴 세트 (53)는 다른 경우 (actionCommand.equals ( "C" )) (54)는 입력 = " " ; 55 다른 IF (actionCommand.equals ("= ")) // 등호들을 때, 프로세스 입력 (56)는 { (57)은 = + "="+ INPUT계산 (INPUT) 58 textField.setText (INPUT) 59 INPUT = "" ; 60 CNT = 1이다. ] (61)이다 } 다른 62 ; INPUT + =는 actionCommand가 // 불필요한 공간을 방지하기 위해 여러 자리 숫자의 번호 (63)는 IF ( == 0 CNT ) 64 textField.setText (INPUT)는, 65 } 66 67 / * 데이터 스택을 계산하는데 이용 * / 68 개인 문자열 계산 (문자열 입력) // 69 { 70 문자열 STR [] (71)이다 STR = input.split ( "" ); 72 스택 <더블> S = 새로운 스택 <더블> (); 73 번 m = 사용해 Double.parseDouble (STR [0 ]); 74 s.push (m); (75) 에 대한이 ( int로 I = 1; 나는 <str.length; 나는 ++ ) { 76 의 경우 (I % 2 == 1 ) { 77 의 경우 (STR [I] .compareTo ( "+") == 0 ) { 78 번 도움 = 사용해 Double.parseDouble (STR [I + 1 ]); 79 s.push (도움); 80 } 81 하다면(STR [I] .compareTo ( "-") == 0 ) { 82 번 도움 = 사용해 Double.parseDouble (STR [I + 1 ]); 83 s.push (- 도움); 84 } 85 의 경우 (STR [I] .compareTo ( "*") == 0 ) { 86 번 도움 = 사용해 Double.parseDouble (STR의 [I + 1 ]); 87 번 ANS = s.peek (); // 取出栈顶元素 88 s.pop (); // 消栈 89 ANS * = 도움; 90 s.push (ANS); 91 } 92 의 경우 (STR [I] .compareTo ( "/") == 0 ) { 93 번 도움 = 사용해 Double.parseDouble (STR [I + 1 ]); 94 번 ANS = s.peek (); 95 s.pop (); 96 ANS / = 도움; 97 s.push (ANS); 98 } 99 } 100 } 101 번 ANS = 0 일; 102 동안 (! {s.isEmpty ()) 103 ANS + = s.peek (); 104 s.pop (); 105 } 106 문자열 결과 = 한 String.valueOf (ANS); 107 리턴 결과; 108 } 109 110 공공 정적 무효 메인 (문자열 인수 []) { 111 JFrame의 프레임 = 새로운 JFrame의 ( "카운터"); // 创建顶级窗口 112 frame.setResizable ( 거짓 ); 113 홈페이지 애플릿 = 새로운 메인 (); 114 .에 콤포넌트 () (애플릿 BorderLayout.CENTER)을 추가; 115 applet.init (); // 애플릿의 초기화 방법 (116) applet.start (); // 스레드 시작 117 frame.setSize (400, 450); // 윈도우 사이즈로 설정 한 18 (frame.setVisible true로를 ) // 가시 창 세트 (119) } (120) }