Java Step_8 GUIコンポーネント(2)


テキスト

//テキストフィールドを表示するプログラム

import javax.swing.*;
import java.awt.*;

class Field{
   public static void main(String args[]){
      JFrame f = new JFrame("Field");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //テキストフィールドを作る
      JTextField tf = new JTextField("テキストフィールドです。必要最小限のフレームで表示しています。");
      
      c.add(tf);

      //フレームを必要最小限のサイズにする
      f.pack();
      f.setVisible(true);
   }
}
      

《実行結果》


テキストエリア

テキストフィールドは1行ですが、テキストエリアは複数の行を編集できます。
テキストエリアは、javax.swingパッケージのJTextAreaクラスで作ります。 「\n」は文字列をそこで改行したいときに使います。

//テキストエリアを表示するプログラム

import javax.swing.*;
import java.awt.*;

class Area{
   public static void main(String args[]){
      JFrame f = new JFrame("Area");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //テキストエリアを作る
      JTextArea ta = new JTextArea("Text のうち「Area」は挿入です。\n",3,20);
      ta.append("ここは追加の行です");
      ta.insert("Area",5);
      
      c.add(ta);
      f.setSize(300,100);
      f.setVisible(true);
   }
}
 

《実行結果》


フローレイアウト

レイアウトは、レイアウトマネージャーを作ってSetLayoutメソッドの引数にすることで設定します。
フローレイアウトは、可能な限り横1行にGUIコンポーネントを配置するレイアウトです。 GUIコンポーネントは、追加された順に左から右へと並びます。1行に入りきれない場合は、次の行に折り返して表示します。 《フローレイアウトのサンプルプログラム》
import javax.swing.*;
import java.awt.*;

class Flow1{
   public static void main(String args[]){
      JFrame f = new JFrame("FlowLayout1");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //レイアウトマネージャーのインスタンスを作る
      FlowLayout f1 = new FlowLayout();
      
      //レイアウトを設定
      c.setLayout(f1);
      
      //ボタンを6個作ってコンテンツ区画に追加する
      c.add(new JButton("1"));
      c.add(new JButton("2"));
      c.add(new JButton("3"));
      c.add(new JButton("4"));
      c.add(new JButton("5"));
      c.add(new JButton("6"));
      
      f.pack();
      f.setVisible(true);
   }
}
      

《実行結果》



//フローレイアウトのサンプルプログラム

import javax.swing.*;
import java.awt.*;

class Flow2{
   public static void main(String args[]){
      JFrame f = new JFrame("FlowLayout1");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //レイアウトマネージャーのインスタンス
      //右詰、水平間隔5、垂直間隔10ピクセル
       FlowLayout f1 = new FlowLayout(FlowLayout.RIGHT,5,10);
      
      c.setLayout(f1);
      c.add(new JButton("1"));
      c.add(new JButton("2"));
      c.add(new JButton("3"));
      
      //追加する場所を直接使用する(先頭は0)
      c.add(new JButton("4"),0);
      c.add(new JButton("5"),2);
      c.add(new JButton("6"),4);
     
      f.pack();
      f.setVisible(true);
   }
}


《実行結果》


フローレイアウトは、ウィンドウの幅が広がったときに、GUIコンポーネントを左詰め、中央、右詰などに整列できます。コンストラクタFlowLayoutの引数で指定します。(ディフォルトはCENTER)
フィールド名整列方法
LEFT左揃え
CENTER中央揃え
RIGHT右揃え
LEADING行頭揃え(通常は左揃えと同じ)る
TRAINING行末揃え(通常は右揃えと同じ)


グリッドレイアウト

グリッドレイアウトは、GUIコンポーネントを縦横の格子状に配置するレイアウト方法です。追加された順に 左上→右上→次行の左端→右隅と並びます。コンポーネントの中で最大のものに合わせられます。
GridLayout() 1 行中にコンポーネントあたり 1 つの列を持つデフォルト指定でグリッドレイアウトを作成します。
GridLayout(rows, cols) 指定された行数と列数を持つグリッドレイアウトを作成します。
GridLayout(rows, cols, hgap, vgap) 指定された数の行と列を持つグリッドレイアウトを作成します。


//グリッドレイアウトのサンプルプログラム

import javax.swing.*;
import java.awt.*;

class Grid1{
   public static void main(String args[]){
      JFrame f = new JFrame("GridLayout1");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //レイアウトマネージャーのインスタンス
      //
       GridLayout g1 = new GridLayout(0,4,10,20);
      
      c.setLayout(g1);
      c.add(new JButton("1"));
      c.add(new JButton("2"));
      c.add(new JButton("3"));
      c.add(new JButton("4"));
      c.add(new JButton("5"));
      c.add(new JButton("6"));
     
      f.pack();
      f.setVisible(true);
   }
}

《実行結果》


ボーダーレイアウト

ボーダーレイアウトは、 領域を上、下、左、右、中央の五つに分けて配置します。それぞれは固有のキーワードである、 NORTH, SOUTH, WEST, EAST, CENTER で指定されます。 JFrameクラスのコンテンツ区画はデフォルトではこのレイアウト方式になっています。
《コンストラクタ》
BorderLayout() コンポーネント間に間隔を設けずに、新しいボーダレイアウトを構築します。
BorderLayout(int hgap, int vgap) コンポーネント間に間隔を指定して、新しいボーダレイアウトを構築します。 hgapとvgapは、縦と横の間隔。指定しなかった場合は、隙間のないレイアウトになります

//ボーダーレイアウトのサンプルプログラム

import javax.swing.*;
import java.awt.*;

class Border1{
   public static void main(String args[]){
      JFrame f = new JFrame("BorderLayout1");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //ボーダーレイアウトマネージャーのインスタンスを作る
       BorderLayout b1 = new BorderLayout();
      
      c.setLayout(b1);
      
      // 第2引数で配置場所を指定
      
      c.add(new JButton("北"),BorderLayout.NORTH);
      c.add(new JButton("東"),BorderLayout.EAST);
      c.add(new JButton("中央"),BorderLayout.CENTER);
      c.add(new JButton("西"),BorderLayout.WEST);
      c.add(new JButton("南"),BorderLayout.SOUTH);
     
      f.pack();
      f.setVisible(true);
   }
}


《実行結果》


自分で配置する

レイアウトマネージャーを使わないで配置するサンプルプログラムです。
setLayoutメソッドの後ろにnullを指定すると、レイアウトマネージャーを使わない設定になります。
setLayoutメソッドの引数に座標(左上x、y座標とサイズ(幅、高さ)を直接指定します。
ウィンドウサイズを変えても、中のGUIコンポーネントは元の位置のままなので、ウィンドウのサイズを変更しないなどの対策が必要です。

//自分で配置するサンプルプログラム

import javax.swing.*;
import java.awt.*;

class Free{
   public static void main(String args[]){
      JFrame f = new JFrame("FreeLayout");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      
      //レイアウトマネージャーを使わない設定
      c.setLayout(null);
      
      JButton b1 = new JButton("Button1");
      JButton b2 = new JButton("Button2");
      JButton b3 = new JButton("Button3");
      
      c.add(b1);
      c.add(b2);
      c.add(b3);

      //個別に座標を指定
      b1.setBounds(0,0,100,50);
      b2.setBounds(100,50,100,50);
      b3.setBounds(200,100,100,50);
      
      
      f.setSize(310,180);
      f.setVisible(true);
   }
}

《実行結果》


パネルを使う

レイアウトマネージャーを使って複雑なレイアウトを実現するのに、複数のレイアウトマネージャーを使うという方法があります。

//パネルを使ったレイアウトのサンプルプログラム

import javax.swing.*;
import java.awt.*;

class PanelSample{
   public static void main(String args[]){
      JFrame f = new JFrame("PanelSample");
      f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
      Container fc = f.getContentPane();
      
      //パネルを作る
      JPanel p = new JPanel();
      
      //パネルのグリッドレイアウト
      GridLayout g1 = new GridLayout(3,3);
      p.setLayout(g1);
      
      //パネルにボタンとラベルを乗せる
      p.add(new JLabel(""));
      p.add(new JButton("↑"));
      p.add(new JLabel(""));
      p.add(new JButton("←"));
      p.add(new JLabel(""));
      p.add(new JButton("→"));
      p.add(new JLabel(""));
      p.add(new JButton("↓"));
      
      //フレームの区画(北)にボタンを配置する
      fc.add(new JButton("CANCEL"),BorderLayout.NORTH);
      
      //フレームの区画(中央)にパネルを配置する
      fc.add(p,BorderLayout.CENTER);
      
      //フレームの区画(南)にボタンを配置する
      fc.add(new JButton("O    K"),BorderLayout.SOUTH);
      
      f.pack();
      f.setVisible(true);
   }
}


《実行結果》