从头开始学java--GUI(二)


一.文本框控件

一个例子:使用文本框控件,这里用的是单行文本框,输入0-9,如果其他输入则不能输入
import java.awt.*;
import java.awt.event.*;


public class TextFieldDemo {
	private Frame frame;
	private Button button;
	private TextField textfield;
	
	TextFieldDemo()
	{
		init();
	}
	
	private void init()
	{
		frame = new Frame("TextFiled");
		
		frame.setBounds(200,200,500,400);
		frame.setLayout(new FlowLayout());
		
		//初始化可以确定长度
		textfield = new TextField(20);
		frame.add(textfield);
		
		button = new Button("hello");
		frame.add(button);
		
		// 添加鼠标事件监听器
		myEvent();
		
		frame.setVisible(true);
	}
	
	public void myEvent()
	{
		frame.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		textfield.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//获取键盘码
				int code = e.getKeyCode();
				if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9))
				{
					System.out.println("please input 0~9");
					//使用此方法,不处理事件,即取消掉操作
					e.consume();
				}
			}
		});
		
	
	}
	
	//main
	public static void main(String[] args)
	{
		new TextFieldDemo();
	}

}
结果:
要点:
1.文本框控件构造函数可以加上文本框的长度。单行文本框只有一行。
2.KeyEvent   e.getCode可以获取按键的值。KeyEvent.中存了各个按键的值,便于记忆。
3.e.consume方法可以取消事件。

二.文本区域控件

import java.awt.*;
import java.awt.event.*;
 
public class MyWindow {
	
	private Frame f;
	private TextField tf;
	private TextArea ta;
	private Button bt;
	
	MyWindow()
	{
		init();
	}
	
	public void init()
	{
		f = new Frame("my window");
		f.setBounds( 300, 300, 500, 400);
		f.setLayout(new FlowLayout());
		
		tf = new TextField(30);
		ta = new TextArea(20, 30);
		bt = new Button("ok");
		
		f.add(tf);
		f.add(bt);
		f.add(ta);
		
		myEvent();
		
		f.setVisible(true);
	}
	
	private void myEvent()
	{
		//关闭事件
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		bt.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				String text = tf.getText();
				ta.append(text+"\n");
				tf.setText("");
			}
		});
		
		
	}

	
	//main
	public static void main(String[] args)
	{
		new MyWindow();
	}
}
结果:

要点:
1.文本区域控件与文本框控件差不多,只不过是多行的。初始化的时候可以在构造函数中输入行数和列数。
2.getText,setText,append方法,获取文本,设置文本,追加文本。


三.对话框

对话框也相当于一个窗口,但是一般用于提示一些信息。一个例子:
import java.awt.*;
import java.awt.event.*;

public class DialogDemo {
	private Frame fm;
	private Button bt;
	private Dialog d;
	
	private Label lab;
	private Button ok_btn;
	
	DialogDemo()
	{
		init();
	}
	
	private void init()
	{
		fm = new Frame("dialog");
		fm.setBounds(300, 300, 500, 300);
		fm.setLayout(new FlowLayout());
		
		bt = new Button("dialog");
		fm.add(bt);
		
		
		d = new Dialog(fm, "提示信息", true);//设置为true,模态对话框(不关了无法操作),设置为false,则为非模态对话框(不关了也能继续操作)
		d.setBounds(300, 300, 100, 100);
		lab = new Label();
		ok_btn = new Button("ok");
		d.add(lab);
		d.add(ok_btn);
		d.setLayout(new FlowLayout());
		
		myEvent();
		
		fm.setVisible(true);
		
	}
	
	private void myEvent()
	{
		fm.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		bt.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				String info = "Dialog";
				lab.setText(info);
				d.setVisible(true);
			}
		});
		
		d.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});
	}
	
	
	public static void main(String[] args)
	{
		new DialogDemo();
	}
}
结果:

要点:
1.d = new Dialog(fm, "提示信息", true);//设置为true,模态对话框(不关了无法操作),设置为false,则为非模态对话框(不关了也能继续操作)
2.对于对话框,也需要对其进行和窗口一样的设定,设置各种参数,以及添加控件的监听器。
3.菜单显示与否通过setVisible方法,如果关掉对话框就设置为false,显示设置为true。


四.菜单

菜单也是我们常用的东东,给个例子:
import java.awt.*;
import java.awt.event.*;

public class MenuDemo {
	private Frame f;
	private MenuBar mb;
	private Menu m,subMenu;
	private MenuItem closeItem, subItem;
	
	MenuDemo()
	{
		init();
	}
	
	private void init()
	{
		f = new Frame("dialog");
		f.setBounds(300, 300, 500, 300);
		f.setLayout(new FlowLayout());
		//菜单栏
		mb = new MenuBar();
		//菜单
		m = new Menu("Menu");
		subMenu = new Menu("subMenu");
		//菜单项
		subItem = new MenuItem("subItem");
		closeItem = new MenuItem("quit");
		//将菜单项加入菜单
		subMenu.add(subItem);
		//将子菜单和菜单项加入菜单
		m.add(subMenu);
		m.add(closeItem);
		//将菜单加入菜单栏
		mb.add(m);
		//将菜单栏加入窗口
		f.setMenuBar(mb);
		
		myEvent();
		
		f.setVisible(true);
	}
	
	private void myEvent()
	{
		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}
	
	public static void main(String[] args)
	{
		new MenuDemo();
	}
	

}<strong>
</strong>
结果:

要点:
1.菜单相关的类有几种,MenuBar,Menu,MenuItem,分别表示菜单栏,菜单,菜单项。
2.菜单栏中可以包括菜单。菜单项为最终选项。菜单中可以包括子菜单和菜单项。
3.通过f.setMenuBar()方法将菜单栏加入窗口。
4.菜单的响应函数方法与其他控件的方法相同。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值