[戻る]
20-----各種部品(component コンポーネント)を作成し、よく使う設定を行う。
/* */
import java.applet.*;
import java.awt.*;//各種部品
public class applet20 extends Applet {
Label lbl; //ラベル管理用
Button btn; //ボタン管理用
TextField txt1; //1行テキスト管理用
TextArea txt5; //5行のテキストアリア管理
List lst3; //3行リスト管理
Checkbox chk; //チェックボックス管理
Choice cho; //選択メニュー管理
Scrollbar scr; //スクロールバー管理
Canvas cnv; //キャンバス管理
public void init(){//アプレットがロードされた時に呼ばれる。
this.setBackground(new Color(0,255,255));
lbl = new Label(" "); //ラベルを生成
this.add(lbl); //追加
btn = new Button(" "); //ボタンを生成
this.add(btn); //追加
txt1 = new TextField(" ",20); //20桁,1行テキスト生成
this.add(txt1); //追加
txt5 = new TextArea("ABCDEFGHIJKLMN ",5,10); //5行、10桁で生成
this.add(txt5); //追加
lst3 = new List(3);//3行表示用
this.add(lst3); //追加
chk = new Checkbox("chk"); //チェックボックス生成
this.add(chk); //追加
cho = new Choice();//"op1"); //選択メニュー生成
this.add(cho); //追加
scr = new Scrollbar(Scrollbar.HORIZONTAL, 0, 60, 0, 300);
this.add(scr); //追加
cnv = new Canvas(); //キャンバス生成
this.add(cnv); //追加
//生成後のアクセス例
lbl.setText("ラベル"); //ラベル表示変更
btn.setLabel("ボタン"); //ボタン表示変更
txt1.setText("テキストです"); //テキスフィールドト表示変更
txt5.append("12\n 345\n6"); //テキストエリア末尾に追加
lst3.add("1番目"); //リストに追加
lst3.add("2番目"); //リストに追加
chk.setState(true); //チェックボックスにチェックを付ける
cho.add("op1"); //選択メニュー
cho.add("op2");
scr.setValue(150); //スクロールバー設定値
cnv.setSize(50,5); //サイズ指定
cnv.setBackground(new Color(255,0,0));
}
}
[戻る]
21 背景色を変更する3つのボタン
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ActionListener利用のため
public class applet21 extends Applet {
applet21 that; //自身を記憶
public void init(){//アプレットがロードされた時に呼ばれる。
that = this; //自身をメモ
Button btn_red, btn_green, btn_blue;//ボタン(メソッド内ローカル変数)
add( btn_red = new Button("赤") ) ;//生成しながら追加
btn_red.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e ){
that.setBackground(new Color(255,0,0));
that.repaint();
//^^thisは使えないことに注意(ここはActionListenerの派生さた名前なしのクラス内)
// しかし、インナークラスには違いなくこの指定は可能⇒applet21.this.repaint();
}
});
add( btn_green = new Button("緑") ) ;//生成しながら追加
btn_green.addActionListener(new ActionListener() {//無名クラス定義と生成
public void actionPerformed(ActionEvent e ){
that.setBackground(new Color(0,255,0));
that.repaint();
}
});
add( btn_blue = new Button("青") ) ;//生成しながら追加
btn_blue.addActionListener(new ActionListener() {//無名クラス定義と生成
public void actionPerformed(ActionEvent e ){
that.setBackground(new Color(0,0,255));
that.repaint();
}
});
}
}
[戻る]
22 任意個所のクリックで、ポップアップメニューを出し、それで背景色を変更する
//PopupMenuクラスに、3つのメニュー項目(MenuItemクラス)を管理させる。
//ポップアップメニュー生成手続きは次のようになる。
//●メニュー構成構築
// 1.PopupMenuオブジェクトを用意して、表示したいコンポーネント(この例ではアプレット)に追加登録
// 2.メニュー項目(MenuItem)を用意
// 3.PopupMenuオブジェクトへaddメソッドで、メニュー項目
// 4.希望の項目数だけ2と3を繰り返す。
// 以上で準備完了
//●PopupMenuオブジェクトに対し、1.で登録したコンポーネントと座標を指定してshowメソッドで表示
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ActionListener利用のため
public class applet22 extends Applet implements MouseListener{
PopupMenu popup;//ポップアップメニュー
public void init(){//アプレットがロードされた時に呼ばれる。
popup = new PopupMenu("色変更");
add(popup); //ポップアップメニューをアプレットに登録
MenuItem mnu_red, mnu_green,mnu_blue;//メニュー項目(ローカル変数)
popup.add( mnu_red= new MenuItem("赤") );//生成しながら追加
mnu_red.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
applet22.this.setBackground(new Color(255,200,200));
}
});
popup.add( mnu_green = new MenuItem("緑") );//生成しながら追加
mnu_green.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
applet22.this.setBackground(new Color(200,255,200));
}
});
popup.add( mnu_blue = new MenuItem("青") );//生成しながら追加
mnu_blue.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
applet22.this.setBackground(new Color(200,200,255));
}
});
this.addMouseListener(this);//マウスイベント処理と登録
}
//public void actionPerformed(ActionEvent e){ }//メニュー選択時のイベント処理
public void mouseClicked(MouseEvent e){ }//クリック
public void mouseEntered(MouseEvent e){ }//入った?
public void mouseExited(MouseEvent e){ }//出た?
public void mouseReleased(MouseEvent e){ }//離された
public void mousePressed(MouseEvent e){ //押した?
int x = e.getX(); //マウスク押された位置を取得
int y = e.getY();
popup.show(this,x,y); //メニュー表示
}
}
[戻る]
23 チェックボックスで背景色を変更する。その1 チェックグループボックスを使う
//チェックグループボックスを使うと、グループ内のどれか1つしか選択できないボタンになる。
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ActionListener利用のため
public class applet23 extends Applet {
public void init(){//アプレットがロードされた時に呼ばれる。
Checkbox box_red, box_green, box_blue;//ローカル管理変数
CheckboxGroup cg = new CheckboxGroup(); //グループ化用オブジェクト生成
add( box_red = new Checkbox("赤",cg, true));//生成しながら追加
box_red.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
setBackground(new Color(255,200,200));
showStatus(e.toString());
}
});
add( box_green = new Checkbox("緑",cg, false));//生成しながら追加
box_green.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
setBackground(new Color(200,255,200));
}
});
add( box_blue = new Checkbox("青",cg, false));//生成しながら追加
box_blue.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
setBackground(new Color(200,200,255));
}
});
setBackground(new Color(255,200,200)); //⇒先頭に移動すると、ボックス色が変化
}
}
[戻る]
24 チェックボックスで背景色を変更する。その2(チェック個所の合成色を作る)
// Checkboxの生成に、CheckboxGroupを指定しなければ、個別チェック操作ができる。
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ActionListener利用のため
public class applet24 extends Applet implements ItemListener{
Checkbox box_red, box_green, box_blue;
public void init(){//アプレットがロードされた時に呼ばれる。
//CheckboxGroup cg = new CheckboxGroup();
add( box_red = new Checkbox("赤",true));//生成しながら追加
box_red.addItemListener(this);
add( box_green = new Checkbox("緑",true));//生成しながら追加
box_green.addItemListener(this);
add( box_blue = new Checkbox("青",true));//生成しながら追加
box_blue.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
int red = 200,green = 200, blue = 200;
showStatus(e.toString());
if(box_red.getState()) //チェックされているか?
red += 55;
if(box_green.getState())
green += 55;
if(box_blue.getState())
blue += 55;
setBackground(new Color(red,green,blue));
}
}
[戻る]
25 スクロールバーの設定値を表示するプログラム
//テキストフィールドのフォーカスの取得を不可にし、キーでスクロールしやすくする。
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //AdjustmentListener利用のため
public class applet25 extends Applet implements AdjustmentListener{
Label l;
Component a;
TextComponent b;//-------------------------------------------------
TextArea t_debug = new TextArea(5,25); //デバック用
TextField 表示対象;
//Label 表示対象;
Scrollbar bar; //スクロールバー
int val = 120; //スクロールバー初期設定値
final int visible = 10; //つまみ(サム:thumb)のサイズ
final int max = 255+visible;//スクロールバー最大値(最大値を255にしたい)
final int min = 0; //スクロールバー最小値
public void init(){//アプレットがロードされた時に呼ばれる。
setBackground(new Color(0,200,200));
表示対象 = new TextField(String.valueOf(val));
//表示対象 = new Label();
表示対象.setFocusable(false);//テキストフォーカスを得られないようにする。
add(表示対象);
bar = new Scrollbar(Scrollbar.HORIZONTAL, val, visible, min, max);
add(bar);
bar.setSize(200,50);
add(t_debug);//メッセージ確認用
bar.setBlockIncrement(20);//□---◆-----□の --をクリックした時の増減
bar.setUnitIncrement(5);//□---◆-----□の □をクリックした時やキー操作の増減
bar.requestFocusInWindow();//フォーカス設定
//スクロールを変化させた時にthis.adjustmentValueChangedに任せる。
bar.addAdjustmentListener(this);
}
public void adjustmentValueChanged(AdjustmentEvent e){
val = bar.getValue(); //設定値取得
表示対象.setText(String.valueOf(val));
t_debug.append(val+"\n");//デバック用
}
}
[戻る]
26 テキストフィールドでEnterキーを押すと、内容がリストに追加される。
// これは、KeyListenerを実装する必要がある。
// また、リストボックスのダブルクリックでテキストフィールドに設定する。
// これは、ボタンアクションと同じでActionListenerを実装する。
/* */
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //KeyListener利用のため
public class applet26 extends Applet implements KeyListener ,ActionListener {
TextField txt = new TextField (20);
List list = new List(7); //7行の可視範囲
public void init(){//アプレットがロードされた時に呼ばれる。
setBackground(new Color(0,200,200));
add(txt);
add(list);
txt.addKeyListener(this); //キーイベント処理の登録
list.addActionListener(this);//リストのダブルクリックやEnterキー処理の登録
}
public void keyTyped(KeyEvent e){// キーを入力
this.showStatus(e.toString());
}
public void keyPressed(KeyEvent e) { //キーを離したとき
this.showStatus(e.toString());
if(e.getKeyCode() == KeyEvent.VK_ENTER){
list.add(txt.getText());//リストへtxt文字列を追加し、
txt.setText(""); //テキストフィールドは空へ
}
}
public void keyReleased(KeyEvent e) {//キーを押しているとき
this.showStatus(e.toString());
}
public void actionPerformed(ActionEvent e){
String s = list.getSelectedItem(); //選択中のリスト項目
if(s != null){// 選択項目が1つだけ存在するか?
txt.setText(s);
}
}
}
[戻る]
27---選択メニューで選ばれた内容を、テキストアリアの選択範囲に設定する(置き換える)。
//ここで言う選択範囲は、テキストをドラックなどで反転させた範囲を言うが、
//選択範囲が無い場合は、きー入力カーソル位置への挿入になる。
/**/
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ItemSelectable利用のため
public class applet27 extends Applet implements ItemListener {
Choice cho = new Choice(); //選択メニュー管理
TextArea txt = new TextArea (10,40);
String item[] = { "background-color:red;","color:blue;",
"text-align:right;","text-indent:5%",""
};
public void init(){//アプレットがロードされた時に呼ばれる。
setBackground(new Color(0,200,200));
for(int i = 0;i < item.length; i++){
cho.add(item[i]);//選択項目文字列を、配列より追加
}
add(cho);
add(txt);
cho.addItemListener(this);//リスナーを登録
}
public void itemStateChanged(ItemEvent e){//選択項目変更
//テキストエリア選択した範囲を取得
int selStart = txt.getSelectionStart(); //TextComponentの継承メソッド
int selEnd = txt.getSelectionEnd();
//選択項目の文字列取得
String s = cho.getSelectedItem();
//テキストエリアの選択部分を置き換え
txt.replaceRange(s,selStart,selEnd);
showStatus(selStart + "から" + selEnd);//確認用
}
}
[戻る]
28---フレームは、アプレットでも利用できる?(アプレットからフレームを呼び出す)
// フレームのクローズボックスをプログラミングするには、WindowListenerをimplementsして、
// windowClosingにプログラムする。
// @をコメントにすると、フレーム生成側(applet28)のfrmフィールドをnullに出来ないため、
// APFrame28を閉じた後、再びフレーム生成ができなくなる。
// また、A、Bの行をコメントにして、ifを無くすと、APFrame28をいくつでも生成できる。
/**/
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //WindowListener利用のため
class APFrame28 extends Frame implements WindowListener{ //フレーム
applet28 that;
String msg = "";
public APFrame28(applet28 it){//コンストラクタ
that = it;
this.setLayout(new FlowLayout()); //デフォルトのBorderLayoutを変更
this.setSize(200,150);
this.add(new Label("人付き合いがうまいというのは、人を許せるということだ。 ロバート・フロストより"));
this.addWindowListener(this);
}
public void windowOpened(WindowEvent e) { //ウィンドウが最初に可視になった
msg = msg + "/最初に見えるようになった";
that.showStatus(msg);
}
public void windowClosed(WindowEvent e) { //ウィンドウがクローズされた
msg = msg + "/クローズされた";
that.showStatus(msg);
}
public void windowClosing(WindowEvent e) {//ユーザが、ステムメニュー(クローズボックスなど)でウィンドウを閉じた
msg = msg + "/閉じる";
that.showStatus(msg);
that.frm = null; //@
this.dispose(); //すべてのネイティブスクリーンリソースを解放(ウインドウが無くなる)
}
public void windowIconified(WindowEvent e) {//ウィンドウが最小化された
msg = msg + "/最小化";
that.showStatus(msg);
}
public void windowDeiconified(WindowEvent e) {//他の状態から通常の状態になった
msg = msg + "/通常の状態へ戻った";
that.showStatus(msg);
}
public void windowActivated(WindowEvent e) {//Window がアクティブ化
msg = msg + "/アクティブ化";
that.showStatus(msg);
}
public void windowDeactivated(WindowEvent e) { //Window がアクティブでなくなった
msg = msg + "/アクティブでなくなった";
that.showStatus(msg);
}
}
public class applet28 extends Applet implements ActionListener {
Frame frm; //フレーム管理用
public void init(){//アプレットがロードされた時に呼ばれる。
Button btn = new Button("フレーム生成");
setLayout(new BorderLayout());//デフォルトのFlowLayoutを変更
add(btn);// ボタンを追加
btn.addActionListener(this);//リスナーを登録
}
public void actionPerformed(ActionEvent e){
if(frm == null){ //A
frm = new APFrame28(this);
frm.show();
}//B
}
}
[戻る]
281 アプレットとJavaの通常アプリケーション両方で扱えるクラスframe281を作り、アプレットから呼び出す。
//フレーム部分のソース----------------------------------------------------------------------------
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class frame281 extends Frame implements WindowListener{
public frame281(){ //コンストラクタ
setSize(400,200);//フレームサイズ変更
TextArea txt = new TextArea("「いわゆる頭のいい人は、足の早い旅人のようなものである。\n"+
" 人より先に人のまだ行かない所へ行き着くこともできるかわりに、\n" +
" 途中の道端あるいはちょっとした脇道にある肝心なものを\n" +
" 見落とす恐れがある」\n\n" +
" \t\t寺田寅彦より",0,0,TextArea.SCROLLBARS_NONE);//スクロールバーなし。桁、行は無視される
txt.setBackground(new Color(0,0,0));
txt.setForeground(new Color(255,255,255));
txt.setEnabled(false); //@編集不可 (TextAreaの親の親のComponentクラスが持つメソッド)
add(txt);
show(); //表示
setLocation(100,100);//位置変更
addWindowListener(this);//ウィンドウイベント処理インスタンス登録
}
public void windowOpened(WindowEvent e) {} //最初に起動する
public void windowClosed(WindowEvent e) {} //クローズされた
public void windowClosing(WindowEvent e) {
this.dispose(); //クローズのプログラム
}
public void windowIconified(WindowEvent e) {}//最小化
public void windowDeiconified(WindowEvent e) {}//通常へ戻った
public void windowActivated(WindowEvent e) {}//アクティブ化
public void windowDeactivated(WindowEvent e) {}//アクティブでなくなった
}
// 既存のframe281クラスのフレームを呼び出すアプレット--------------------------------------------------
/**/
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //WindowListener利用のため
public class applet281 extends Applet implements ActionListener {
public void init(){//アプレットがロードされた時に呼ばれる。
Button btn = new Button("フレーム生成");
setLayout(new BorderLayout());//デフォルトのFlowLayoutを変更
add(btn);// ボタンを追加
btn.addActionListener(this);//リスナーを登録
}
public void actionPerformed(ActionEvent e){
new frame281();
}
}
[戻る]
282 メニュー付き、フレーム部分のソース
//メニュー付き、フレーム部分のソース---------------------------------------------
import java.awt.*;
import java.awt.event.*;
public class frame282 extends Frame {
TextArea text;
MenuBar mnuBar; //メニューバー管理用
Menu menu1,menu12,menu2; //メニュー管理用
MenuItem item11, item121, itemExit; //メニュー項目
public frame282(){ //コンストラクタ
setTitle("メニュー付きフレーム");
setSize(640,180);//フレームサイズ変更
setLocation(100,100);//位置変更
add(text = new TextArea());
//メニュー追加関連
setMenuBar(mnuBar = new MenuBar()); //メニューバー追加@
mnuBar.add(menu1 = new Menu("メニュー1"));//トップメニュー追加
mnuBar.add(menu2 = new Menu("メニュー2"));//トップメニュー追加
menu1.add(item11 = new MenuItem("項目11"));//項目追加
menu1.add(menu12 = new Menu("メニュー12"));//メニュー追加
menu12.add(item121 = new MenuItem("項目121"));//項目追加
menu1.add(new MenuItem("項目13"));//項目追加
menu2.add(new MenuItem("項目21"));//項目追加
MenuShortcut ms = new MenuShortcut(KeyEvent.VK_Q, false);
menu1.add(itemExit =new MenuItem("終了(Quit)",ms));//ショートカット付き項目追加
item11.addActionListener(new ActionListener(){//メニュー実行用オブジェクト生成登録
public void actionPerformed(ActionEvent e){
frame282.this.text.append(e.toString() + "\n");
}
});
item121.addActionListener(new ActionListener(){//メニュー実行用オブジェクト生成登録
public void actionPerformed(ActionEvent e){
frame282.this.text.append(e.toString() + "\n");
}
});
itemExit.addActionListener(new ActionListener(){//メニュー実行用オブジェクト生成登録
public void actionPerformed(ActionEvent e){
frame282.this.dispose(); //クローズのプログラム
}
});
show(); //表示
}
}
// 既存のframe282クラスのメニュー付きフレームを呼び出すアプレット--------------------------------------------------
/**/
import java.applet.*;
import java.awt.*;//各種部品
import java.awt.event.*; //ActionListener利用のため
public class applet282 extends Applet implements ActionListener {
public void init(){//アプレットがロードされた時に呼ばれる。
Button btn = new Button("フレーム生成");
setLayout(new BorderLayout());//デフォルトのFlowLayoutを変更
add(btn);// ボタンを追加
btn.addActionListener(this);//リスナーを登録
}
public void actionPerformed(ActionEvent e){
new frame282();
}
}
[戻る]
29---- IPアドレス表示用パネル(IpPanel)を別途に作っておいて、そのパネルを利用する。
//IPアドレスとホストネームを表示するパネル----------------------------------------------------------
import java.awt.*; //TextFieldなど利用のため
import java.net.*;//InetAddress利用のため
import java.lang.*; //Exception利用のため
public class IpPanel extends Panel {
InetAddress i_adr;
public TextField ip;
public TextField hostName;
public IpPanel(){
add(new Label(" IP Address:"));
ip = new TextField("xxx.xxx.xxx.xxx",15);
add(ip); //追加
add(new Label(" Host Name:"));
hostName = new TextField(30);
add(hostName); //追加
hostName.setEnabled(false);
setSize(640,45);
}
public void validate(){
if(i_adr != null){
try {
ip.setText(i_adr.getHostAddress());
hostName.setText(i_adr.getHostName());
ip.setEnabled(false);
}
catch (Exception e){
hostName.setText(e.toString());
}
}
super.validate();//親へも再配置調整指示
}
public void setAddress(InetAddress ip){
i_adr = ip;
validate();//再配置調整の指示
}
}
//-----------------------------------------------------------------------
//●IPアドレス表示用パネル(IpPanel)を別途に作っておいて、そのパネルを利用する。
/* */
import java.applet.*;
import java.awt.*;
import java.net.*;//InetAddress利用のため
public class applet29 extends Applet {
public void init(){//アプレットがロードされた時に呼ばれる。
setLayout(new BorderLayout());
IpPanel panel = new IpPanel();
add(panel);//centerへ配置される。
try {
InetAddress local = InetAddress.getLocalHost();
panel.setAddress(local);
}
catch (UnknownHostException e){
panel.hostName.setText(e.toString());
}
}
}
[戻る]
---
---