English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
java Swing基本チュートリアルのグラフィカルなサンプルコード
マルチスレッドやジェネリックとは異なり、Swingは使用に焦点を当てています。
以下はコードとコメントが主で、言葉は少ない。
(一)基本的なフレーム
package Swing; import java.awt.*; import javax.swing.*; /** * * @author QuinnNorris * 基本的なフレーム */ public class FrameTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-生成されたメソッドスタブ // スレッドを開始します。すべてのSwingコンポーネントはイベントディスパッチスレッドで設定する必要があり、スレッドはマウスクリックやキー操作をユーザーインターフェースコンポーネントに転送します EventQueue.invokeLater(new Runnable() { // 匿名内部クラスはRunnableインターフェースのインスタンスであり、runメソッドを実装しています public void run() { SimpleFrame frame = new SimpleFrame(); // 以下に定義したSimpleFrameクラスのオブジェクトを作成し、コンストラクタメソッドを呼び出すために使用します frame.setExtendedState(Frame.MAXIMIZED_BOTH); // ウィンドウを最大化する // 他のオプション属性:Frame.NORMAL ICONIFIED MAXIMIZED_HORIZ MAXIMIZED_VERT // MAXIMIZED_BOTH frame.setTitle("Christmas"); // ウィンドウタイトルを設定する frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ユーザーがフレームを閉じたときに実行される操作を選択する、時にはウィンドウを隠す必要があり、直接退出できない場合にこのメソッドを使用する frame.setVisible(true); // ウィンドウがユーザーが最初にウィンドウを見る前に内容を追加できるように、ウィンドウを可視化します } }); } // main関数が終了するとき、プログラムは終了しません。代わりに、すべてのフレームが閉じられたり、System.exitが呼ばれたときにプログラムが終了します。 } class SimpleFrame extends JFrame { public SimpleFrame() { Toolkit kit = Toolkit.getDefaultToolkit(); // ウィンドウのスクリーン上の位置を変更し、ウィンドウのサイズを変更する // Toolkitクラスにはローカルウィンドウとのインタラクションに多くのメソッドが含まれています Dimension screenSize = kit.getScreenSize(); // ToolkitのgetScreenSizeメソッドはDimensionクラスのオブジェクトを返します setSize((int) (screenSize.getWidth()), (int) (screenSize.getHeight())); // setBounds(0,0,(int)(screenSize.getWidth()),(int)(screenSize.getHeight())); // ウィンドウの位置とサイズを定義する // setLocation(0,0); ウィンドウの左上角からの位置を定義する // setLocationByPlatform(true); ウィンドウシステムがウィンドウ位置を制御し、前のウィンドウから少し離れたオフセット量 // 画像でウィンドウアイコンを置き換える Image img = new ImageIcon("D:");/icon.png").getImage(); setIconImage(img); } }
出力結果:画面全体を覆うフレームで、タイトルバーの名前はChristmas、グラフは自分で埋めた画像です。
(二)文字列を出力する
package Swing; import java.awt.*; import javax.swing.*; /** * * @author QuinnNorris * 文字列を出力する */ public class HelloWorld { /** * @param args */ public static void main(String[] args) { // TODO Auto-生成されたメソッドスタブ // スレッドを開始する、すべてのSwingコンポーネントはイベントディスパッチスレッドで設定する必要があり、スレッドはマウスクリックとキーボードコントロールをユーザーインターフェースコンポーネントに転移します EventQueue.invokeLater(new Runnable() { // 匿名内部クラスはRunnableインターフェースのインスタンスであり、runメソッドを実装しています public void run() { JFrame frame = new HelloWorldFrame(); // HelloworldFrameは以下に定義されており、JFrameを継承し、そのコンストラクタメソッドを使用しています frame.setTitle("HelloWrold"); // タイトルを設定します frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ユーザーがフレームを閉じたときに実行される操作を選択する、時にはウィンドウを隠す必要があり、直接退出できない場合にこのメソッドを使用する frame.setVisible(true); // ウィンドウがユーザーが最初にウィンドウを見る前に内容を追加できるように、ウィンドウを可視化します } }); } } // JFrameを継承したクラスを書く、ここで作業を行います class HelloWorldFrame extends JFrame { public HelloWorldFrame() { add(new HelloWorldComponent()); //JComponentクラスのサブクラスを実例化したインスタンスをその中に追加します pack(); //フレームコンポーネントのデフォルトサイズを呼び出すか、それともSetSizeメソッドで置き換えることができます } } class HelloWorldComponent extends JComponent { public static final int MESSAGE_X = 75; public static final int MESSAGE_Y = 100; private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; /** * 私たちはこのをオーバーライドして内容を書き込みます * * @param g * Graphicsオブジェクトは、画像とテキストを描画する設定を保存しています */ public void paintComponent(Graphics g) { g.drawString("Hello World!", MESSAGE_X, MESSAGE_Y); // 引数:書き込み内容、文字列の最初の文字が左から右に配置されています75ピクセル、文字列の最初の文字が上から下に向かって配置されています100ピクセル } /** * このメソッドをオーバーライドして、このクラスのコンポーネントのサイズを表現します * * @return このクラスのコンポーネントがどのくらいの大きさであるべきかを返します */ public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); // Dimension オブジェクトを返し、このコンポーネントのサイズを表します } }
出力結果:左上に位置する名前が「HelloWrold」の小さなウィンドウで、ウィンドウの中央には「Hello World!」とあります。
(三)グラフィックを印刷します
package Swing; import java.awt.EventQueue; import javax.swing.*; import java.awt.*; import java.awt.geom.*; /** * * @author QuinnNorris * グラフィックを印刷します */ public class DrawTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-生成されたメソッドスタブ // スレッドを開始します。すべてのSwingコンポーネントはイベントディスパッチスレッドで設定する必要があり、スレッドはマウスクリックやキー操作をユーザーインターフェースコンポーネントに転送します EventQueue.invokeLater(new Runnable() { // 匿名内部クラスはRunnableインターフェースのインスタンスであり、runメソッドを実装しています public void run(){ JFrame frame = new DrawFrame(); // 以下に定義したSimpleFrameクラスのオブジェクトを作成し、コンストラクタメソッドを呼び出すために使用します frame.setTitle("DrawTest"); // タイトルを設定します frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ユーザーがフレームを閉じたときに実行される操作を選択します。時にはウィンドウを非表示にする必要があり、直接終了するのではなくこのメソッドを使用する必要があります frame.setVisible(true); // ウィンドウがユーザーが最初にウィンドウを見る前に内容を追加できるように、ウィンドウを可視化します } }); } } class DrawFrame extends JFrame { public DrawFrame(){ add(new DrawComponent()); //JComponentクラスのサブクラスを実例化したインスタンスをその中に追加します pack(); //フレームコンポーネントのデフォルトサイズを呼び出すか、それともSetSizeメソッドで置き換えることができます } } class DrawComponent extends JComponent { private static final int DEFAULT_WIDTH = 400; private static final int DEFAULT_HEIGHT = 400; /** * 私たちはこのをオーバーライドしてグラフィックを印刷します * * @param g * Graphicsオブジェクトは必要なGraphicsです2Dの親クラス */ public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; //Graphicsをインスタンス化します2Dのクラスのオブジェクト、それはGraphicsの引数です2Dのサブクラス double leftX = 100; double topY = 100; double width = 200; double height = 150; //私たちは矩形の4つの属性を設定します Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height); //Rectangleを作成します2Dのオブジェクト、このオブジェクトはSharpインターフェースを継承しています //Doubleはその中の1つの静的内部クラスであり、初期化する際にはDouble内でパラメータを設定する必要があります g2.draw(rect); //Sharpインターフェースを実装するインスタンスを渡し、キャンバスに描画します Ellipse2D ellipse = new Ellipse2D.Double(); //円形のインスタンスを作成します ellipse.setFrame(rect); //円形と矩形クラスは兄弟関係であり、彼らが同じ境界判定方法を持っています //ここでは、rectを使用して円形を記述します(円の外接矩形を通じて) g2.draw(ellipse); //Sharpインターフェースを実装するインスタンスを渡し、キャンバスに描画します g2.draw(new Line2D.Double(leftX,topY,leftX+width,topY+height)); //キャンバスに直線を描画します double centerX = rect.getCenterX(); double centerY = rect.getCenterY(); double radius = 150; //円の中心座標と半径を定義します Ellipse2D circle = new Ellipse2D.Double(); //円のインスタンスを作成します circle.setFrameFromCenter(centerX, centerY, centerX+radius, centerY+radius); //座標と半径を設定します g2.draw(circle); //キャンバスに円を描画します } /** * このメソッドをオーバーライドして、このクラスのコンポーネントのサイズを表現します * * @return このクラスのコンポーネントがどのくらいの大きさであるべきかを返します */ public Dimension getPreferredSize(){ return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT); // Dimension オブジェクトを返し、このコンポーネントのサイズを表します } }
出力結果:左上のウィンドウに円が1つあり、その外に外界の長方形があり、長方形の左上から右下への線があり、この長方形の中心が原点で半径が150ピクセルの円
(四)図形に色を塗る
Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height); //Rectangleを作成します2Dのオブジェクト、このオブジェクトはSharpインターフェースを継承しています //Doubleはその中の1つの静的内部クラスであり、初期化する際にはDouble内でパラメータを設定する必要があります g2.setColor(Color.BLUE); //g2オブジェクトに塗りつぶし色を設定すると、線の色も影響されます g2.fill(rect); //選択した色をrectで示される閉じた図形に塗りつぶします g2.draw(rect); //Sharpインターフェースを実装するインスタンスを渡し、キャンバスに描画します
前のコードの他の部分を変更せずに、以下の2行のコードを挿入します(1、4行のコードの元の位置に中央に挿入します。2、3行のコード)で塗りつぶし効果を得ます。
出力結果:中央に青色の長方形があり、長方形の中心が原点で、150ピクセルが半径の青色の線の円があります。
(五)特殊字体
package Swing; import javax.swing.*; import java.awt.*; import java.awt.font.*; import java.awt.geom.*; /** * * @author QuinnNorris 特殊字体 */ public class FontTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-生成されたメソッドスタブ // スレッドを開始します。すべてのSwingコンポーネントはイベントディスパッチスレッドで設定する必要があり、スレッドはマウスクリックやキー操作をユーザーインターフェースコンポーネントに転送します EventQueue.invokeLater(new Runnable() { // 匿名内部クラスはRunnableインターフェースのインスタンスであり、runメソッドを実装しています public void run() { JFrame frame = new FontFrame(); // 以下に定義したSimpleFrameクラスのオブジェクトを作成し、コンストラクタメソッドを呼び出すために使用します frame.setTitle("FontTest"); // タイトルを設定します frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ユーザーがフレームを閉じたときに実行される操作を選択します。時にはウィンドウを非表示にする必要があり、直接終了するのではなくこのメソッドを使用する必要があります frame.setVisible(true); // ウィンドウがユーザーが最初にウィンドウを見る前に内容を追加できるように、ウィンドウを可視化します } }); } } class FontFrame extends JFrame { public FontFrame() { add(new FontComponent()); // JComponentクラスのサブクラスを実例化したインスタンスをその中に追加します pack(); // フレームコンポーネントのデフォルトサイズを呼び出すか、それともSetSizeメソッドで置き換えることができます } } class FontComponent extends JComponent {}} private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; /** * このメソッドをオーバーライドして、いくつかの作業を行います * * @param g * Graphicsオブジェクトは必要なGraphicsです2Dの親クラス */ public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Graphicsをインスタンス化します2Dのクラスのオブジェクト、それはGraphicsの引数です2Dのサブクラス String message = "Hello World!"; // 操作する文字を書きます Font f = new Font("Dialog", Font.BOLD, 36); // フォントタイプを作成します、引数にはフォント族、スタイルタイプ、サイズが含まれます // また、特別なメソッドを呼び出して、ローカルのフォントパッケージをロードして取得することもできます g2.setFont(f); // fをgに設定します2の中で FontRenderContext context = g2.getFontRenderContext(); // このメソッドを呼び出して、スクリーンデバイスのフォント属性の説明オブジェクトを取得します Rectangle2D bounds = f.getStringBounds(message, context); // getStringBoundsメソッドは文字を囲む矩形を返します double x = (DEFAULT_WIDTH - bounds.getWidth()) / 2; // bounds.getWidthメソッドは文字の幅を取得できます double y = (DEFAULT_HEIGHT - bounds.getHeight()) / 2; // bounds.getHeightメソッドは文字の高さを取得できます double ascent = -bounds.getY(); // フォントの上昇度を取得します double baseY = y + ascent; // 文字の基線位置 g2.drawString(message, (int) x, (int) y); // 文字の位置を設定します g2.setPaint(Color.LIGHT_GRAY); // ラインの色を明るいグレーに設定します g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY)); // 文字の基線上に一つの横線を描画します Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight()); g2.draw(rect); } /** * このメソッドをオーバーライドして、このクラスのコンポーネントのサイズを表現します * * @return このクラスのコンポーネントがどのくらいの大きさであるべきかを返します */ public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); // Dimension オブジェクトを返し、このコンポーネントのサイズを表します } }
出力結果:ウィンドウの中央に「Hello World」というテキストがあり、灰色の矩形で囲まれており、ベースラインに水平線が引かれています
(六)画像を追加
package Swing; import javax.swing.*; import java.awt.*; /** * * @author QuinnNorris 画像を追加 */ public class ImageTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-生成されたメソッドスタブ // スレッドを開始します。すべてのSwingコンポーネントはイベントディスパッチスレッドで設定する必要があり、スレッドはマウスクリックやキー操作をユーザーインターフェースコンポーネントに転送します EventQueue.invokeLater(new Runnable() { // 匿名内部クラスはRunnableインターフェースのインスタンスであり、runメソッドを実装しています public void run() { JFrame frame = new ImageFrame(); // 以下に定義したSimpleFrameクラスのオブジェクトを作成し、コンストラクタメソッドを呼び出すために使用します frame.setTitle("ImageTest"); // タイトルを設定します frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ユーザーがフレームを閉じたときに実行される操作を選択します。時にはウィンドウを非表示にする必要があり、直接終了するのではなくこのメソッドを使用する必要があります frame.setVisible(true); // ウィンドウがユーザーが最初にウィンドウを見る前に内容を追加できるように、ウィンドウを可視化します } }); } } class ImageFrame extends JFrame { public ImageFrame() { add(new ImageComponent()); // JComponentクラスのサブクラスを実例化したインスタンスをその中に追加します pack(); // フレームコンポーネントのデフォルトサイズを呼び出すか、それともSetSizeメソッドで置き換えることができます } } class ImageComponent extends JComponent { private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; private Image image; /** * ImageComponentのコンストラクタ、画像をインスタンス化するために使用されます */ public ImageComponent(){ image = new ImageIcon("D:")/image.jpg").getImage(); //パスから画像を取得します } /** * このメソッドをオーバーライドして、いくつかの作業を行います * * @param g * */ public void paintComponent(Graphics g) { if(image == null ) return; //画像が正しくない場合、エラーが発生することを避けるために直接返します g.drawImage(image, 0,0,null); //キャンバス上に画像を表示します } /** * このメソッドをオーバーライドして、このクラスのコンポーネントのサイズを表現します * * @return このクラスのコンポーネントがどのくらいの大きさであるべきかを返します */ public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); // Dimension オブジェクトを返し、このコンポーネントのサイズを表します } }
出力結果:キャンバスの左上隅に追加した画像を配置します。
ご読覧ありがとうございました。皆様のサポートに感謝します!
声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に提供し、アップロードした内容であり、このサイトは所有権を持ちません。また、人工的な編集は行われていません。著作権侵害が疑われる内容を見つけた場合は、メールを送信して:notice#oldtoolbag.com(メールを送信する際には、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認が取れましたら、このサイトは侵害されていると考えられる内容をすぐに削除します。)