现在的位置: 首页 > 综合 > 正文

【Java】使用JFrame监听事件创建一个复制文本功能的窗体程序与按钮快捷键

2017年11月27日 ⁄ 综合 ⁄ 共 2119字 ⁄ 字号 评论关闭

一、基本目标

设计一个窗体程序,有两个文本框,其中第二个文本框是不可编辑的,有三个按钮,点击Copy按钮能把第一个文本框复制到第二个文本框,点击Clear按钮能把两个文本框的内容清空,也可以用快捷键ALT+R与ALT+Y操作

点击Close按钮,能关闭这个窗体程序

二、基本思想

这个JFrame的布局与各组件名称如下,请联合下面的代码查看:

三、制作过程

请看如下代码:

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

//由于此窗体有触发事件,因此必须使用ActionListener接口
class textbox implements ActionListener{
	//成员变量,一个JFrame,两个JLabel,两个JTextField,三个JButton,三个JPanel
	JFrame f;
	JLabel l1,l2;
	JTextField t1,t2;
	JButton b1,b2,b3;
	JPanel p1,p2,p;
	public static void main(String args[]){
		textbox a=new textbox();
		a.go();
	}
	public void go(){
		//界面标题
		f=new JFrame("textbox");
		//创建2个固定文本,一个叫source一个叫target
		l1=new JLabel("Source");l2=new JLabel("Target");
		//创建2个文本框
		t1=new JTextField();t2=new JTextField();
		//t2文本框为不可编辑的
		t2.setEnabled(false);
		//创建3个按钮,里面的参数分别为其文本
		b1=new JButton("Clear");b2=new JButton("Copy");b3=new JButton("Close");
		//为b1,b2创建快捷键ALT+R与ALT+Y,一般快捷键只会在纯英文按钮中加下划线
		b1.setMnemonic(KeyEvent.VK_R);b2.setMnemonic(KeyEvent.VK_Y);
		//b1,b2,b3触发的事件,分别与下面actionPerformed的Clear事件Copy事件Close事件相对应
		b1.setActionCommand("Clear");b2.setActionCommand("Copy");b3.setActionCommand("Close");
		b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);
		//创建面板
		p=new JPanel();p1=new JPanel();p2=new JPanel();
		//设置外围最大的那个面板p的布局为BorderLayout(),这个布局可以查查资料,不在这里赘述
		p.setLayout(new BorderLayout());
		//把各个部件分别摆上p1,p2
		p1.add(l1);p1.add(t1);p1.add(l2);p1.add(t2);p2.add(b1);p2.add(b2);p2.add(b3);
		//把p1摆上p中的BorderLayout的CENTER位置,p2则是SOUTH位置
		p.add(p1,BorderLayout.CENTER);
		p.add(p2,BorderLayout.SOUTH);
		//p1使用GridLayout2x2布局,p2则使用1x3的,正好摆好各个组件
		p1.setLayout(new GridLayout(2,2));
		p2.setLayout(new GridLayout(1,3));
		f.getContentPane().add(p);
		//窗口大小为320x100,不允许用户自己调整大小,可见,默认不可见
		f.setSize(320,100);
		f.setVisible(true);
		f.setResizable(false);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	//按钮触发时间函数指定要这样写
	public void actionPerformed(ActionEvent e){
		if(e.getActionCommand()=="Clear"){
			//如果触发的时间为Clear,那么把t1,t2的文本清空
			t1.setText("");
			t2.setText("");
		}
		if(e.getActionCommand()=="Copy"){
			//如果触发的时间为Copy,那么把t2的文本就是t1的文本
			t2.setText(t1.getText());
		}
		if(e.getActionCommand()=="Close"){
			//如果触发的时间为Close,就退出这个程序
			System.exit(0);
		}
	}
}

其中,对比于《【Java】JFrame Helloworld》(点击打开链接)一文中的程序,本文已经把画界面这个代码用类封装在text类中的go()方法中,更加具有可移植性

抱歉!评论已关闭.