一、基本目标
设计一个窗体程序,有两个文本框,其中第二个文本框是不可编辑的,有三个按钮,点击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()方法中,更加具有可移植性