記事のソース: Computer Enthusiast 著者: Zhang Jian
バベルの塔の建設にどれだけの砂と石が使われたか誰が知っていますか?ローマを建設するのに何日と何夜かかったか誰にも分かりません。私たちが知っている唯一のことは、レンガや石がなければ、何千マイルも曲がりくねった万里の長城は存在せず、岩や粘土の集積がなければ、永遠のピラミッドも存在しないということです。何を学ぶにも基礎知識の準備が重要であることがわかります。それでは、Swing のいくつかの基本機能を理解することから始めて、ローマを構築するという素晴らしいプロジェクトを始めましょう。
序文
Java Cafe は長い間営業しており、ジャワのコーヒーの味が気に入ったら、ぜひ頻繁に訪れてください。今回は、香り豊かな大きなコーヒーを皆さんにご用意しました。「連聯館」ゲームの開発をベースに、Java での Swing の使い方を一緒に学びます。このコーヒーをじっくり味わっていただければ、きっとわかるはずです。 Java は私のコーヒーに独特の風味があることを発見しただけでなく、プロのゲームを開発する方法も学びました。これはまさに両方の長所です。
チラ見せとして、下の写真はゲームのスクリーンショットです。ゲームをダウンロードして試してみて (ゲーム プログラムのダウンロード、ソース ファイルのダウンロード)、java -jar kyodai.jar を使用してコマンド ライン モードで実行できます。さらに、私のホームページ http://www.ismyway.com にアクセスして、このゲームのスタンドアロン バージョンとモバイル バージョンをダウンロードして試用することもできます (図 1 を参照)。
Java Cafeでは以前AWTの知識を紹介しましたが、SwingとAWTの違いは何でしょうか? Java を勉強している人なら誰でも、重量コントロールと軽量コントロールという用語を聞いたり見たことがあるかもしれません。AWT は通常重量コントロールと呼ばれるものであり、Swing は軽量コントロールです。 Java のスローガンは「一度書けば、どこでも実行できる」であることは誰もが知っていますが、これにはプログラム内で可能な限り純粋な Java コードを使用する必要もあります。残念ながら、AWT はネイティブ プラットフォームへのインターフェイスに依存しているため、AWT で作成されたインターフェイスはオペレーティング システムが異なると若干異なる場合があります。 Swing はまったく異なります。Swing は純粋な Java で書かれているため、Swing で書かれたインターフェイスはすべてのプラットフォームで同じ外観を保証します。もう 1 つのトリックがあります。JDK では、区別しやすくするために、JButton (AWT での対応する相当物は Button) など、すべての Swing コントロールが大文字の J で始まり、Swing コントロールと AWT コントロールを簡単に区別できます。
スイング初体験
Swing プログラミングを学びたい人のために、特別にいくつかのヒントを用意しました。まず、コードをダウンロードして読み取ることが非常に必要です。これは Swing に関するチュートリアルであるため、Swing に関連する内容のみを可能な限り説明します。アルゴリズム部分など、Swing に関係のない内容は基本的に説明しません。次に、スペースの制限により、コードのすべての部分をここに完全に記述することは不可能なので、完全なコードと比較する必要もあります。最後に、誰もが Swing の学習に集中しやすくするために、ゲーム開発に必要なリソースもダウンロード ファイルに含めました。ダウンロード後、コンパイルして実行し、実行結果を確認できます。
1. 最上位コンテナ
トップレベルコンテナとは何ですか? Java をグラフィックス プログラミングに使用する場合、図はどこに描画されるのでしょうか?グラフィック描画を提供できるコンテナが必要です。このコンテナはトップレベル コンテナと呼ばれ、ウィンドウと考えることもできます。最上位コンテナはグラフィックス プログラミングの基礎です。すべてのグラフィカルなものは最上位コンテナに含める必要があります。 Swing には、使用できるトップレベルのコンテナーが 3 つあります。
・JFrame:Windowsシステムのウィンドウフォームに似たアプリケーションを設計するために使用されます。
・JDialog: JFrame と似ていますが、ダイアログ ボックスのデザインに JDialog が使用される点が異なります。
・JApplet:Webページに埋め込めるJavaアプレットを設計するために使用されます。
Swing を使用してウィンドウ クラス プログラムを作成する必要がある場合、コードは次のようになります。
javax.swing.* をインポートします。
パブリッククラス KyodaiUI
JFrame を拡張します {
…
}
2.コントロール
コントロールは、アプリケーション インターフェイスを構成する基本要素です。ボタン、テキスト ボックス、プログレス バーなどはすべてコントロールです。コントロール (ここではビジュアル コントロールについてのみ説明します) は、コンテナ コントロールと非コンテナ コントロールに分類できます。文字通り、コンテナ コントロールは、他のコントロールを含めることができる特別なコントロールです。たとえば、Java の JPanel コントロールは、ボタンやテキスト ボックスなどの非コンテナ コントロールを JPanel に配置することもできます。 -JPanel のボタンやテキスト ボックスなどのコンテナ コントロール。その中に複数の JPanel コントロールを配置します (トップレベル コンテナもコンテナ タイプのコントロールであることに注意してください。各ウィンドウ アプリケーションにはトップレベル コンテナが 1 つだけあります)。つまり、トップレベルのコンテナを他のコントロールに含めることはできません)。
Java には、先ほど述べた JPanel に加えて、JTabbedPane、JScrollPane などのコンテナ コントロールが多数あります。非コンテナ コントロールには、JButton、JLabel、JTextField などがあります。コンテナー タイプのコントロールにコントロールを追加する必要がある場合は、次のように add(Component comp) メソッドを使用してこれを実現できます。
JPanel パネル = new JPanel();
JButton ボタン = new JButton();
パネル.追加(ボタン);
3. レイアウト
レイアウトとは何ですか?レイアウトは、コントロールの配置と位置を制御するために Java で使用されるインターフェイス管理システムです。他のビジュアル プログラミング開発言語を使用したことのある人は、Java インターフェイスのデザインに初めて触れたとき、必ず「ぎこちない」と感じるでしょう。制御座標を設定するための WYSIWYG メソッドが存在しないのです。しかし、Java 自体が提供するレイアウト管理システムも私たちのニーズを十分に満たすことができ、クロスプラットフォームのパフォーマンスにおいてはより多くの利点があることがわかりました。
一般的に使用されるレイアウトは次のとおりです。
・BorderLayout: インターフェースを上下左右に分割した管理システムです。BorderLayout レイアウトでは、コントロールを最大 5 つまでしか配置できません。それ以上のコントロールがある場合は、使用することをお勧めします。他のレイアウト システム。
・GridLayout: GridLayout は、ユーザー インターフェイスをチェス盤のようなレイアウトに分割するレイアウト管理システムです。 Windows に付属するものと同様の計算ソフトウェアを設計したい場合は、間違いなく GridLayout が最良の選択です。
・FlowLayout: FlowLayout は上記 2 種類のレイアウト管理システムとは異なり、各コントロールを配置する場所を指定する必要はなく、FlowLayout にコントロールを追加するだけで、FlowLayout がコントロールを順番に配置します。コントロールを追加する順序。十分なスペースがない場合、コントロールは自動的に折り返されます。
これらのレイアウト管理システムの基本を理解したら、一緒にインターフェイスの設計に取り掛かりましょう。 QQ ゲームの「Lianliankan」の設定を注意深く観察すると、インターフェイス全体が 3 つの領域に分かれていることがわかります。上部はシステム メニュー領域、最大の領域はユーザー ゲーム領域で、ユーザー インタラクションもあります。エリア。各エリアは複数のコントロールで構成されます。
コントロールがたくさんあるので、どこから始めればよいでしょうか?コンテナ コントロールには他のコントロールを配置できるため、最初に配置するコンテナ コントロールを決定するだけで済みます。 使用する必要があるコンテナー コントロールの数がわかったので、レイアウト管理システムの選択に進みましょう。 GridLayout を使用しますか? FlowLayoutを使うのはちょっと強引な気がしますが?もっと良い選択肢はあるでしょうか?ところで、以下の図 2 に示すような BorderLayout を思い浮かべたことがあると思います。
開始する前に、インターフェイスの設計では、メイン プログラム インターフェイスのサイズであっても、各領域のサイズであっても、最初にサイズを考慮する必要があるという事実に注意を払う必要があります。適切なサイズが設計されていない場合、非常に大きなサイズになります。将来それを変更するのは苦痛です。
対応するソースプログラムは次のとおりです。
java.awt.* をインポートします。
javax.swing.* をインポートします。
public class KyodaiUI extends JFrame {
public KyodaUI() {
this.setSize(780, 500); //フォームのサイズを 780*500 に設定します。
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //フォームのサイズを変更できません。
this.setTitle("連聯館"); //タイトルを設定します
JPanel ツールバー = 新しい JPanel();
toolBar.setBackground(Color.white);
toolBar.setPreferredSize(new Dimension(780, 48));
JPanel actionPanel = new JPanel() // 新しい JPanel タイプのコントロールを作成します。
actionPanel.setBackground(Color. yellow); // 背景色を設定します。
actionPanel.setPreferredSize(new Dimension(160, 380)); // サイズを設定します
JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.blue);
contentPanel.setPreferredSize(new Dimension(620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main(String[] args) throws HeadlessException {
KyodaiUI kyodaiUI = new KyodaiUI();
kyodaiUI.show();
}
}
上記のプログラムがどのように動作するかを見てみましょう。まず、extends JFrame は、最も基本的なトップレベルのコンテナ コントロールである JFrame から継承されていることを示します。実際、JDK では、文字 J で始まるコントロールは Swing コントロールです。次に、コンテナのプロパティを設定します。このうち setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) は、ユーザーがフォームの右上隅にある「閉じる」ボタンをクリックしたときにウィンドウ プロセスを閉じるように Java 仮想マシンに指示するために使用されます。これを行わないと、クリックしてウィンドウを閉じることはできますが、プログラムは終了しません。次のコードでは、3 つのパネル コンテナを最上位のコンテナに追加します。 AWT では add(toolBar, BorderLayout.NORTH) として直接記述することができますが、Swing では getContentPane() として記述する必要があり、そうしないとプログラムが実行されます。間違っている。
これをコンパイルして実行して、実行結果と同じかどうかを確認できます (図 3 を参照)。
4. ボーダー
領域ごとに異なる前景色を使用していますが、境界線があると階層感がなくなり、より美しくなります。
Java では、J で始まるすべての Swing コントロールは setBorder メソッドを使用して、それ自体に境界線を設定できます。直線、凸、凹、空などさまざまな種類のボーダーがあり、それらを自由に組み合わせて独自のスタイルを作成することもできます。すべてのボーダーは、javax.swing.BorderFactory で提供される次のような静的メソッドを使用して作成する必要があります。
境界線 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
newColor(45, 92, 162),
newColor(43, 66, 97)、
newColor(45, 92, 162),
新しいカラー(84, 123, 200));
さて、toolBar.setBackground(Color.white)をtoolBar.setBorder(border)に変更します。すでに立体感が出ていますか?
実戦 - 自分の名前を書いてください
これで、何もできないインターフェースが完成しました。でも、ローマは一日にして成らずです。
次に、メニュー領域に番組情報を表示する「About」メニューを用意してみましょう。自分の名前を他の人に知られたくないですか? Swing 自体は、既製のボタン コントロール JButton を提供します。必要なのは、新しいボタンを作成することだけです。 JButton about = new JButton("about"); このボタンを他の場所ではなくメニュー領域に配置するにはどうすればよいでしょうか。次のコードを追加できます。toolBar.add(about); ボタンをクリックしても応答がないのはなぜですか?これは、ボタンをクリックしたときに何を行うかをプログラムに指示していないためです。ボタンにイベント応答を追加するには、まず about.addActionListener(this) を使用して、ボタンが押されたときにイベントをリッスンするようにプログラムに指示する必要があります。ActionListener はプログラム インターフェイスであるため、少しの処理も行う必要があります。クラスの宣言 変更: public class KyodaiUI extends JFrameimplements ActionListener {...} ActionListener インターフェースを実装する目的は、イベントを処理したいことをプログラムに伝えることです。もちろん、最後にイベントに応答するコードを追加する必要があります。
public void actionPerformed(ActionEvent e) {
if (e.getSource() == about) {
JOptionPane.showMessageDialog(this, "私の名前", "概要",
JOptionPane.INFORMATION_MESSAGE);
戻る ;
}
}
このうち、e.getSource() は現在イベントをトリガーしているコントロールを表します。プログラムには複数のコントロールが存在することが多いため、これらのコントロールがイベントを生成する可能性があるため、このメソッドを使用してイベントを生成したコントロールを見つける必要があります。
まとめ
今日学んだことを復習しましょう。まず、トップレベルのコンテナーについて理解しました。また、コントロールがコンテナー コントロールと非コンテナー コントロールに分かれていることも理解しました。最後に、ボタンについても説明しました。ちょっとした出来事。
学びながら練習していくのは言うまでもありません。そこで、今日学んだことを定着させるために、小さな宿題をいくつか残しておこうと思います。上で追加したボタンはメニュー バーの中央にあり、美しくありません。入れてみてください 左右どちらかに置いてみてください。
最後に、より良い参考資料をいくつか提供したいと思います。
●JFC/SwingでGUIを作成する
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●2Dグラフィックス
http://java.sun.com/docs/books/tutorial/2d/index.html
●JDK API
http://java.sun.com/j2se/1.4.2/docs/api/index.html