总是看着黑框框的命令行实在是忒单调,于是我还是先学个界面吧。
java中提供了图形化界面的的工具,java.Awt,javax.Swing两个包。
java.Awt:抽象窗口工具集,需要调用本地系统方法实现功能(依赖于平台,跨平台属性较弱)。属于重量级控件。
javax.Swing:建立在Awt的基础上,提供了更多的组件,增强了移植性(完全跨平台)。属于轻量级控件。
现在我们一般用Swing包
import java.awt.*; public class Fram { public static void main(String[] args) { Frame f = new Frame("my awt"); //设置大小 f.setSize(500, 100); //设置位置 f.setLocation(200, 200); //设置布局方法 f.setLayout(new FlowLayout()); //创建一个按钮 Button b = new Button("hello"); //添加到容器里面,Frame默认为边界布局 f.add(b); //显示 f.setVisible(true); } }结果:
要点:
1.创建frame窗体
2.对窗体进行基本设置(大小,位置,布局)
3.定义组件
4.通过add将组件添加到窗体中
5.通过setVisible(true)让窗体显示
虽然现在有了窗口界面,但是按钮按下却没有反应,需要给按钮添加事件处理函数。
要点:
1.事件源是awt包或者swing包中的图形界面组件。
2.每一个事件源都有自己的对应事件和共性事件。
3.可以触发某一个事件的动作封装在监听器中。
4.我们只需要将监听器中的事件处理函数写好就可以进行操作了,以上的三者java已经为我们写好了。
import java.awt.*; import java.awt.event.*;//导入event包 public class Fram { public static void main(String[] args) { Frame f = new Frame("my awt"); //设置大小 f.setSize(500, 100); //设置位置 f.setLocation(200, 200); //设置布局方法 f.setLayout(new FlowLayout()); //创建一个按钮 Button b = new Button("hello"); //添加到容器里面,Frame默认为边界布局 f.add(b); //添加窗口监听函数 f.addWindowListener(new MyWin()); //显示 f.setVisible(true); } } //创建一个窗口适配器,继承于WindowAdapter class MyWin extends WindowAdapter { //覆写父类的方法,参数接收窗口操作,内部为处理函数 public void windowClosing(WindowEvent e) { System.exit(0); } //打开时运行 public void windowOpened(WindowEvent e) { System.out.println("open window"); } }
为按钮添加事件:
import java.awt.*; import java.awt.event.*; public class FrameDemo { // 定以组件的引用 private Frame frame; private Button button; //构造函数中添加初始化函数 FrameDemo() { init(); } //初始化函数,进行相关操作和设置 public void init() { frame = new Frame("hello frame"); //对frame进行设置 frame.setBounds(300, 300, 500, 400); frame.setLayout(new FlowLayout()); //添加组件 button = new Button("hello"); frame.add(button); //添加窗体事件 myEvent(); //显示 frame.setVisible(true); } //自定义窗体事件 private void myEvent() { //匿名内部类,窗口事件 frame.addWindowListener(new WindowAdapter() { //关闭事件的处理函数 public void windowClosing(WindowEvent e) { System.exit(0); } }); //按钮添加功能,按钮也是事件源, button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("button is pressed"); } }); } //main public static void main(String[] args) { new FrameDemo(); } }结果:
要点:
1.在设置好窗口及控件之后,要为各种控件添加响应函数。调用控件的addActionListener(),窗口的addWindowListener()方法。
2.这个方法要实现一个接口,可以写一个类,也可以直接用匿名内部类实现。但是由于接口的各个方法都是抽象方法,实现较困难,所以我们一般采用适配器。
3.addWindowListener()等里面要new 一个对象,即一个适配器(监听器),然后实现适配器的各种方法。
4.适配器里面的各种方法已经写好,我们覆写就可以。方法里面接受*Event型的事件。
5.执行完以上步骤时,监听器就装好啦。我们进行操作后,产生一个事件对象,监听器中的函数接受事件对象,然后进行操作
import java.awt.*; import java.awt.event.*; public class MouseEvent { private Frame frame; private Button button; MouseEvent() { init(); } private void init() { frame = new Frame("Mouse Event"); frame.setBounds(200,200,500,400); frame.setLayout(new FlowLayout()); 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); } }); button.addMouseListener(new MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { System.out.println("Mouse is clicked"); } public void mouseEntered(java.awt.event.MouseEvent e) { System.out.println("Mouse entered"); } }); button.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + " " + e.getKeyCode()); } }); } //main public static void main(String[] args) { new MouseEvent(); } }