JavaSE 13—フォームプログラム開発(中)


JavaSE 13—フォームプログラム開発(中)
1、レイアウト方式
1)絶対レイアウト
コンテナ内のコンポーネントの位置とサイズをハードに指定します.フォーム、パネルなどのコンテナは、絶対レイアウトで使用できます.
手順:
Container.setLayout(null)方式でレイアウトマネージャをキャンセルします.
Component.setBounds()メソッドを使用して、各コンポーネントのサイズと位置を設定します.
注意:絶対レイアウトでは、異なるプラットフォームでコンポーネントが重複する問題が発生する可能性があります.
インスタンス1:絶対レイアウトを使用してログインウィンドウを作成する
package qijia.si;

import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class EntryFrame extends JFrame {
		private JTextField passWordTextField;
		private JTextField nameTextField;
		public static void main(String[] args){
			EventQueue.invokeLater(new Runnable(){
					public void run(){
						try{
							EntryFrame frame = new EntryFrame();
							frame.setVisible(true);
						}catch(Exception e){
							e.printStackTrace();
						}
					}
			});
		}
		public EntryFrame(){
			super();
			getContentPane().setLayout(null);  //       
			setBounds(100,100,321,188);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			final JPanel panel = new JPanel();
			panel.setLayout(null);
			panel.setBounds(0,0,316,154);
			getContentPane().add(panel);
			final JLabel name = new JLabel();
			name.setFont(new Font("    ",Font.PLAIN,12));
			name.setText("   :");
			name.setBounds(62,27,52,26);
			panel.add(name);
			nameTextField = new JTextField();
			nameTextField.setBounds(120,30,129,22);
			panel.add(nameTextField);
			final JLabel passWord = new JLabel();
			passWord.setFont(new Font("    ",Font.PLAIN,12));
			passWord.setText("  :");

			passWord.setBounds(65,55,44,18);
			panel.add(passWord);
			passWordTextField = new JTextField();
			passWordTextField.setBounds(120,58,129,22);
			panel.add(passWordTextField);
			final JButton entry = new JButton();
			entry.setText("  ");
			entry.setBounds(84,104,64,28);
			panel.add(entry);
			final JButton cancel = new JButton();
			cancel.setText("  ");
			cancel.setBounds(170,104,64,28);
			panel.add(cancel);
		}
}
)ウィンドウの既定の境界レイアウト
このレイアウトマネージャは、コンポーネントレイアウトを東、西、南、北、の5つの領域に配置し、各領域にコンポーネントを配置したり、指定した領域に他のコンポーネントを含むコンテナを配置したりすることができます.
境界レイアウトマネージャの定義
BorderLayoutは、境界レイアウトマネージャを実装します.コンテナのsetLayout()メソッドでレイアウトマネージャを設定します.setLayoutメソッドには、レイアウトマネージャインスタンスオブジェクトというパラメータがあります.そのため、この境界レイアウトマネージャを使用するには、インスタンスオブジェクトを作成する必要があります.
BorderLayout()この構築方法は、各領域の水平方向と垂直方向にコンポーネント間隔が設定されていないデフォルトの境界レイアウトマネージャを作成するために使用されます.
BorderLayout(hgap,vgap)は、マネージャの水平方向と垂直方向の間隔を設定する2つの整数タイプを受信します.
境界レイアウトの適用
境界レイアウトマネージャを適用するには、まずコンテナのsetLayout()メソッドを呼び出して境界レイアウトマネージャを使用するように設定し、コンテナContainerクラスのadd()メソッドを呼び出してコンポーネントを追加する場合に、このコンポーネントのレイアウト領域を設定する必要があります.
例:境界レイアウトを使用して、フォームに東西南北の4つのボタンを追加します.
			package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class BorderTest extends JFrame{
	public BorderTest(){
		setTitle("         ");
		setBounds(100,100,300,200);
		JButton northButton =  new JButton(" ");
		JButton southButton =  new JButton(" ");
		JButton westButton = new JButton(" ");
		JButton eastButton = new JButton(" ");
		JButton centerButton = new JButton(" ");
		
		Container panel = getContentPane();
		panel.add(northButton,BorderLayout.NORTH);
		panel.add(southButton,BorderLayout.SOUTH);
		panel.add(westButton, BorderLayout.WEST);
		panel.add(eastButton,BorderLayout.EAST);
		panel.add(centerButton,BorderLayout.CENTER);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
	}
	public static void main(String[] args){
		BorderTest test =  new BorderTest();
		test.setVisible(true);
	}
}

3)メッシュレイアウト
グリッドレイアウトマネージャは、コンポーネントをグリッド形式で並べ、グリッドレイアウトを使用してコンテナを等しい長方形に分割します.各長方形領域には、表のセルのように整列したコンポーネントを配置できます.
メッシュレイアウトマネージャの作成
GridLayoutクラスはグリッドレイアウトマネージャを表し、コンテナはsetLayout()メソッドでGridLayoutをオブジェクトとし、コンテナをネットワークレイアウトの形式に設定できます.
例:ネットワークレイアウトを使用し、フォームコンテナを3*3のネットワークレイアウトマネージャを使用し、フォームにボタンを追加します.
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class GridLayoutTest extends JFrame{
	public GridLayoutTest(){
		setTitle("         ");
		setBounds(100,100,300,200);
		JButton[] buttons = new JButton[9];
		Container panel = getContentPane();
		panel.setLayout(new GridLayout(3,3));
		for(int i = 0;i<9;i++){
			buttons[i] = new JButton("  "+(i+1));
			panel.add(buttons[i]);
		}
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		GridLayoutTest gridLayout = new GridLayoutTest();
		gridLayout.setVisible(true);
	}
}
)フローレイアウト
フローレイアウトは、フローレイアウトのコンテナを使用してコンポーネントを指定した方向に配置する最も基本的なレイアウトマネージャです.
例:フォームを作成し、フローレイアウトの形式でコントロールを排出し、中央揃えで配置します.
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class FlowTest extends JFrame{
	public FlowTest(){
		setTitle("           ");
		Container c = getContentPane();
		getContentPane().setLayout(
			new FlowLayout(FlowLayout.CENTER,10,10)	
		);
		for(int i=0;i<10;i++){
			c.add(new JButton("  "+i));
		}
		setSize(300,200);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		FlowTest flowTest = new FlowTest();
	}
}
2.基本コントロール
1)ラベルコントロール
ラベルコントロールは、テキストまたはプロンプト情報を表示し、テキスト文字列とアイコンをサポートします.
JLabelの構築方法:
JLabel()コンテンツも画像もないラベルを作成
JLabel(String text)テキストコンテンツのラベルを作成する
JLabel(String textr,int horizontalAlignment)テキストの内容と水平表示のラベルを作成する
JLabel(Icon icon)画像コンテンツのラベルを作成
...
2)一般ボタンコントロール
SwingでJButtonはボタンコントロールを表します.一般的な構築方法:
JButton(String text)テキストID付きボタンを作成
JButton(Icon icon)画像ID付きボタンを作成
JButton(String text,Icon icon)テキストと画像の両方を持つボタンを作成
例:フォームを作成し、フォームに「表示」と「ヘルプ」の2つのボタンを追加し、ボタンに画像を追加します.

package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class JbuttonDemo extends JFrame{
	public static void main(String[] args){
		JbuttonDemo frame = new JbuttonDemo();
		frame.setVisible(true);
	}
	public JbuttonDemo(){
		super();
		setTitle("    ");
		
		ImageIcon editIcon = new ImageIcon(getClass().getResource("watch.png"));
		ImageIcon delIcon = new ImageIcon(getClass().getResource("help.png"));
		
		getContentPane().setLayout(new FlowLayout());
		setBounds(100,100,215,74);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton okButton = new JButton("  ",editIcon);
		JButton delButton = new JButton();
		getContentPane().add(okButton);
		delButton.setIcon(delIcon);
		delButton.setText("  ");
		getContentPane().add(delButton);	
		}
}
)ラジオボタンコントロール
JRadioButtonコンポーネントはラジオボタンを実現した.JRadioButtonは単独で使用してもよいし、ButtonGroupクラスと組み合わせて使用してもよい.
例:ボックスを作成し、フォームに3つのラジオボタンを作成し、この3つのボタンを同じボタングループに追加し、最初のラジオボタンを選択状態に設定します.
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class JRadioMemo extends JFrame{
	public JRadioMemo(){
		super();
		setTitle("      ");
		ButtonGroup group =new ButtonGroup();
		getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
		setBounds(100,100,230,87);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JRadioButton rb = new JRadioButton();
		group.add(rb);
		rb.setText("  ");
		getContentPane().add(rb);
		JRadioButton rb_1 = new JRadioButton("  ",true);
		group.add(rb_1);
		getContentPane().add(rb_1);
		JRadioButton rb_2 = new JRadioButton("  ");
		group.add(rb_2);
		getContentPane().add(rb_2);
	}
	public static void main(String[] args){
		JRadioMemo JRM = new JRadioMemo();
		JRM.setVisible(true);
	}
}

4)チェックボックスコントロール
JCheckBoxクラスはチェックボックスを実装します.
例:フォームを作成し、フォームにチェックボックスコンポーネントを定義します.ユーザーは複数を選択できます.
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class CheckBoxDemo extends JFrame{
	public CheckBoxDemo(){
		super();
		getContentPane().setLayout(null);
		setBounds(100,100,310,103);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JCheckBox cb0 = new JCheckBox();
		cb0.setBounds(10,34,64,26);
		cb0.setText("  ");
		getContentPane().add(cb0);
		JCheckBox cb1 =new JCheckBox("  ");
		cb1.setBounds(84,35,64,26);
		getContentPane().add(cb1);
		JCheckBox cb2 = new JCheckBox("  ");
		cb2.setBounds(158,34,64,26);
		getContentPane().add(cb2);
		JCheckBox cb3 = new JCheckBox("  ");
		cb3.setBounds(232,34,64,26);
		getContentPane().add(cb3);
		final JLabel label = new JLabel();
		label.setText("     : ");
		label.setBounds(10, 10, 91, 18);
		getContentPane().add(label);
	}
	public static void main(String[] args){
		CheckBoxDemo Demo1 = new CheckBoxDemo();
		Demo1.setVisible(true);
	}
}