JavaのAWTとSWINGパッケージを使用して視覚的なインターフェースを行います。
まずは、簡単にこの2つのパッケージを見てみましょう:
JavaでAWTやSwingは視覚的なインターフェースを作るために使用されています。AWT(なAbstract Window Toolkitの):抽象ウィンドウツールキット、早期の書き込みGUIアプリケーションを含みます。スイング:既存の問題AWT新たに開発されたグラフィカル・インターフェース・パッケージを解決するために。スイングAWTが向上し、拡張されます。
原則
AWT:UnixシステムでX Windowのスタイルである一方、Windowsシステムは、WindowsのAWTウィンドウスタイルですので、ネイティブの方法によって達成されることは、オペレーティングシステムを呼び出します。オペレーティングシステムが提供するAWTのグラフィックス機能とグラフィックス機能との1対1の関係を持って、我々はピアと呼んでいます。私たちは、グラフィカル・ユーザ・インタフェースにAWTコンポーネントを使用するときに、他の言葉では、我々は、ライブラリ、オペレーティングシステムが提供している使用グラフィックスで実際にあります。オペレーティングシステムのグラフィックスライブラリの異なる機能には、別のプラットフォーム上に存在しない可能性がありますプラットフォームの機能上に存在し、同じではありません提供。Java言語によって主張「一度コンパイルどこでも実行」のコンセプトを実現するためには、AWTは、そのプラットフォームに依存しない機能を犠牲にして達成する必要があり、それは、汎用オペレーティングシステムが提供する様々な方法で提供さAWTのグラフィックス機能であります交差点のグラフィックス機能。AWTは、その機能を達成するために地元の方法に依存しているので、我々は通常、ヘビー級AWTコントロールのコントロールと呼ばれます。
スイング:軽量コンポーネントは、呼び出されたネイティブメソッドによって達成されていないので、ウィンドウスタイルがより多様であるスイング。しかし、スイングとheaveyweightコンポーネントがありました。たとえばJWindowは、ダイアログ、JFrameのため。純粋なJavaで書かれたスイング、良いポータビリティ、異なるプラットフォーム上で同じように見えます。したがって、JAVAのスイングはウィンドウクラスは、クロスプラットフォームになることができないので、窓関数は、クロスプラットフォームおよびスケーラビリティの特徴であるように、問題を解決する、とSwing Swingコンポーネント(スイングは、純粋なJavaコードで書かれている、と呼ばれるので、軽量コンポーネントあまりにも多くのシステムリソース、いわゆる軽量コンポーネントを占有する必要はありません!)
違い:
- AWTは速く走るローカルプログラムに基づいて、C / C ++の方法で、実行速度が遅いスイングAWTのJavaプログラムに基づいています。
- AWTコントロールは、異なるプラットフォーム上で動作が異なる、とSwingのパフォーマンスは、すべてのプラットフォーム間で一貫しています。
どのように選択するには:
実際には、あなたが使用する必要があり、プラットフォームのAWTやSwingアプリケーションの展開の種類によって異なります。例えば:
- 組み込みアプリケーションの場合は、ターゲットプラットフォームのハードウェアリソースは、しばしば非常に制限され、アプリケーションの速度がプロジェクトの重要な要因です。この矛盾した状況で、シンプルかつ効率的なAWTは確かに埋め込まれたJavaの最初の選択肢になります。
- 一般的な、標準ベースのJavaアプリケーションのPCまたはワークステーションの重要な要因は、アプリケーションのハードウェアリソースの制限は、多くの場合、プロジェクトによって引き起こされていません。そのため、Javaの標準バージョンでは、スイングの利用を推進し、その速度を犠牲にしてアプリケーションの機能を実現するために、です。
私たちはメインコースに始まっこの2つのパッケージを理解した後、我々は簡単な電卓を達成するために、今日の書き込み:
1 インポート持つjava.awt。* ; 2 インポート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である 文字列入力= ""; // 式入力 14 ブールフラグに= trueに、 15 16 公共 ボイドのinit() // 内部オーバーライド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のパネル1 = 新しいJPanelの()。 24 panel1.add(テキストフィールド)。 25 panel.setLayout(新しいグリッドレイアウト(4、4、5、5 ))。 26 panel1.setLayout(新しい FlowLayoutの(3 ))。 27 C.add(パネル、BorderLayout.CENTER)。 28 C.add(パネル1、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 列、アクションコマンドは、= e.getActionCommand(); 51である IF(actionCommand.equals( "+")|| actionCommand.equals( " - ")|| actionCommand.equals( "*")||アクションコマンド。等号( "/" )) 52は 、入力= + "" +アクションコマンド+ ""; // 入力、所望の形状への入力パターンセット 53は 他 IF(actionCommand.equals( "C" )) 54が 入力= " " ; 55 他の IF(actionCommand.equals(" = ")) // 等号を聞く場合、プロセス入力 56は 、{ 57は INPUT = + "=" +計算(INPUT); 58 textField.setText(INPUT); 59 INPUT = "" ; 60 CNT = 1 ; 61である } 他 62である ; INPUT + =アクションコマンドは// 不要なスペースを回避するために、複数桁の数字の数 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; iが<str.length; iが++ ){ 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 = 0D。 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 frame.getContentPane()(アプレット、BorderLayout.CENTER)を加えます。 115 applet.init()。 // アプレットのinitメソッド 1 16 applet.start(); // スレッドが開始 117 frame.setSize(400、450); // ウィンドウサイズ設定 1 18 (frame.setVisible trueにする); // 可視ウィンドウを設定し 119 } 120 }