介绍与初体验
AWT(Abstract Window Toolkit)包括了很多类和接口,用于java application的GUI(Graphics User Interface)编程。GUI的各种元素(窗口、按钮、文本框等)由java类实现。一般使用类在java.awt包中,Container和Component是AWT中的两个核心类。
package demo.ba1;import java.awt.*;public class TestFrame {public static void main(String[] args) {Frame f = new Frame("hello gui");f.setSize(500,600);//定义窗口大小f.setBackground(Color.red);//定义背景颜色f.setResizable(true);//准许调节大小f.setLocation(1,5);//定义组件位置f.setVisible(true);//允许jvm开始画图}}
package demo.ba1;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class TestPanel {public static void main(String[] args) {Frame f = new Frame("hello panel");Panel p = new Panel(null);//参数是panel下的容器的布局器f.setLayout(null);//布局器f.setBounds(300,300,500,500);//定义位置和大小(x,y,width,height)f.setBackground(new Color(0,0,102));p.setBounds(50,50,300,300);p.setBackground(new Color(55,77,88));f.add(p);f.setVisible(true);//关闭窗口,结束程序f.addWindowListener(new WindowAdapter() {//窗体点击关闭时,要做的事@Overridepublic void windowClosing(WindowEvent e) {//结束程序System.exit(0);}});}}
三种常用布局器
FlowLayout - 顺序布局器f.setLayout(new FlowLayout());
BorderLayout - 东南西北中f.setLayout(new BorderLayout());f.add(b1,BorderLayout.CENTER);**
//当定义了这种布局时,setSize()会失效//可以使用以下方式设大小,但不一定会成功:p1.setPreferredSize(new Dimension((f.getWidth()-p.getWidth())/2,(f.getHeight()-p.getHeight())/2));
GridLayout - 网格布局器f.setLayout(new GridLayout(行数,列数)
在windows窗口中央显示Frame
int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;f.setLocation(width/2-f.getWidth()/2,height/2-f.getHeight()/2);
事件监听
button按钮监听
package demo.ba2;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class TestActionEvent {public static void main(String[] args) {Frame f = new Frame("test");f.setBounds(300,300,200,200);Button b = new Button("button");b.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("a button has been pressed");}});f.add(b,BorderLayout.CENTER);//f.pack(); // pack()包裹。无视Frame定义的宽高,将容器包裹起来,button有系统默认的宽高f.setVisible(true);}}
文本监听 - text
package demo.ba2;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class TFActionEvent {public static void main(String[] args) {Frame f = new Frame("123");f.setSize(300,330);TextField tf = new TextField();tf.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {TextField tf = (TextField) e.getSource();System.out.println(tf.getText());tf.setText("");}});f.add(tf);f.setVisible(true);}}
关闭窗口 - 点击事件 - 鼠标触发事件
//关闭窗口,结束程序f.addWindowListener(new WindowAdapter() {//窗体点击关闭时,要做的事@Overridepublic void windowClosing(WindowEvent e) {//结束程序System.exit(0);}});f.setVisible(true);
