Java中GUI的事件处理
事件处理GUI布局介绍一. JFC预览JFC主要是由AWTAbstract Window Toolkit(AWT)、Swing以及Java 2D三者所构成,若将这些一同搭配运用,则用Java程序语言撰写开发成的使用者介面,无论移转、转移到Microsoft WindowsWindows、Mac OS X或Linux等各种不同的作业平台上,都能保有一致性的图像呈现。前面我们介绍了用AWT创建图形用户
·
事件处理
一. JFC预览JFC主要是由AWTAbstract Window Toolkit(AWT)、Swing以及Java 2D三者所构成,若将这些一同搭配运用,则用Java程序语言撰写开发成的使用者介面,无论移转、转移到Microsoft WindowsWindows、Mac OS X或Linux等各种不同的作业平台上,都能保有一致性的图像呈现。
前面我们介绍了用AWT创建图形用户界面的基本原理。图形用户界面由各种组件构成,普通组件被添加到容器类组件中, 布局管理器决定如何在容器中放置组件。组件委托事件监听器来响应事件,从而完成与用户的交互。
在java.awt包中,提供了各种具体的组件,如窗体Frame, 面板Panel, 按钮Button等。AWT组件的优点是简单、稳定,兼容于任何一个JDK版本,缺点是依赖于本地操作系统的GUI, 缺乏平台独立性。每个AWT组件都有一个同位体(peer), 它们位于java.awt.peer包中, 这些peer负责与本地操作系统进行交互,而本地操作系统负责显示和操作组件。由于AWT组件与本地平台GUI绑定,因此用AWT组件创建和图形界面在不同的操作系统中会有不同的外观。
为了让用Java创建的图形界面也能够跨平台, 即在不同操作系统中保持相同的外观,从JDK1.2版本开始引入了Swing组件,这些Swing组件位于javax.swing包中,成为JDK基础类库的一部分。
Swing组件是用纯Java语言编写而成的,不依赖于本地操作系统的GUI, Swing组件可以跨平台运行。独立于本地平台的Swing组件被称为轻量级组件, 而依赖于本地平台的AWT组件被称为重量级组件。
多数Swing组件的父类为javax.swing.JComponent, 多数Swing组件类都以大写字母"J"开头。除JFrame之外,其余的Swing组件都继承了JComponent类。
二. JFrame
每个JFrame都有一个与之关联的内容面板(contentPane), 可以针对这个contentPane设置布局及加入组件。
JFrame jFrame = new JFrame("Hello");
Container contentPane = jFrame.getContentPane();
contentPane.setLayout(new GridLayout(2,1));
contentPane.add(jLabel);
JFrame的setContentPane(Container contentPane)用来重新设置内容面板,因此也可以按以下方式向容器中加入组件。
JFrame jFrame = new JFrame("Hello");
JPanel jPanel = new JPanel();
jPanel.setLayout(new GridLayout(2,1));
jPanel.add(jLabel);
jFrame.setContentPane(jPanel);
JFrame的setDefaultCloseOperation(int operation)方法用来决定如何响应用户关闭窗体的操作,参数operation有以下
可选值:
. JFrame.DO_NOTHING_ON_CLOSE: 什么都不做
. JFrame.HIDE_ON_CLOSE: 隐藏窗体,这是JFrame的默认选项
. JFrame.EXIT_ON_CLOSE: 结束程序
三.javax.swing.*中的对象是对awt中组件的扩展比如JLabel和Label JButton和Button等等
四.事件监听的三要素
事件源 事件对象 监听器
首先需要给事件源添加一个监听器,然后事件源在某些情况下会产生事件对象,产生事件对象后再调用事件监听器的方法并且把这个产生的事件对象当作参数传过去。
例如:在按钮A上面添加了一个鼠标点击的监听器对象L,然后我们用鼠标点击按钮的时候A,按钮A内部会产生一个鼠标点击事件对象e,然后就会调用监听器对象L指定的方法去处理这个鼠标点击事件。如以下代码,通过对按钮“=”实现监听事件,能够进行数字的计算
package com.ch09;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class FirstGUI {
private JFrame frame;
private JTextField txt1=new JTextField(10);
private JTextField txt2=new JTextField(10);
private JTextField txt3=new JTextField(6);
private JLabel lab=new JLabel("+");
private JButton btn=new JButton("=");
public FirstGUI(){
//构造容器对象
frame=new JFrame();
frame.setTitle("JD1615-first");
frame.setBounds(100,100,400,400);//位置(100,100)和宽高(400*400)
frame.setVisible(true);
//设置窗口关闭时程序结束
init();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void init(){
//2、设置布局管理器
frame.setLayout(new FlowLayout());//设置为流式布局管理器
//3、添加组件
frame.add(txt1);
frame.add(lab);
frame.add(txt2);
frame.add(btn);
frame.add(txt3);
//4、创建事件处理
//btn事件源
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击等号"+e.toString());
String strtxt1=txt1.getText();
String strtxt2=txt2.getText();
double res1=Integer.valueOf(strtxt1);
double res2=Integer.valueOf(strtxt2);
txt3.setText(res1+res2+" ");
}
});
}
public static void main(String[] args) {
new FirstGUI();
}
}
结果如下所示:
以上就是事件处理
更多推荐
已为社区贡献2条内容
所有评论(0)