GUI是什么?
简介:GUI是一个比较古老的图形化页面,是最早用于JDK1.2来进行窗口绘制的工具,运行这个窗口需要JRE环境,并且相对于现在的窗口来说,是不美观的,但里面包含了事件监听.
Swing的核心:Swing AWT
AWT:
AWT包含了创建用户界面和绘制图形和图像的所有类,同时也提供了GUI编程的核心控件和组件如:窗口按钮文本框,结构如下:
容器与组件
Frame:
Frame是window下的一个窗口组件,可以使用这个组件来完成第一个窗口:
package com.text;
import java.awt.*;
public class test42 {
public static void main(String[] args) {
//设置窗口
MyFrame myFrame1=new MyFrame(200,200,100,100,Color.blue,false);
MyFrame myFrame2=new MyFrame(200,200,300,100,Color.red,false);
MyFrame myFrame3=new MyFrame(200,200,100, 300, Color.CYAN,false);
MyFrame myFrame4=new MyFrame(200,200,300, 300, Color.green,false);
}
}
//窗口类
class MyFrame extends Frame{
private static int id=1;
public MyFrame(int width,int height,int x,int y,Color color,boolean change){
super("我的第"+(id++)+"个窗口");
//创建窗口对象
Frame frame=new Frame();
//设置可见
frame.setVisible(true);
//设置大小
frame.setSize(width,height);
//设置背景颜色
frame.setBackground(color);
//设置出现位置
frame.setLocation(x,y);
//设置是否不可改变窗口
frame.setResizable(change);
}
}
Panel:
解决了关闭事件
package com.text;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class test44 {
public static void main(String[] args) {
//创建窗口和面板
Frame frame=new Frame("你好");
Panel panel=new Panel();
//设置Frame布局为空
frame.setLayout(null);
//设置窗口
frame.setBounds(100,100,300,300);
frame.setBackground(Color.BLACK);
//设置面板相对与frame布局
panel.setBounds(100,100,100,100);
panel.setBackground(Color.GREEN);
frame.add(panel);//添加面板,因为Panel是基继承Component类的所以可以添加
frame.setVisible(true);//设置可见
//监听事件点击关闭则关闭窗口
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
布局管理
流式布局:awt中提供了FlowLayout()流式布局
package com.text;
import java.awt.*;
public class test45 {
public static void main(String[] args) {
Frame frame=new Frame();
Button button1=new Button("button1");
Button button2=new Button("button2");
Button button3=new Button("button2");
button1.setSize(10,10);
button2.setSize(10,10);
button3.setSize(10,10);
//设置流式布局
frame.setLayout(new FlowLayout(FlowLayout.TRAILING));//里面的参数FlowLayout.CENTER(居中)FlowLayout.LEADING(左对齐)FlowLayout.RIGHT(右对齐)
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
}
东西南北中布局: awt中提供了BorderLayout类进行布局
package com.text;
import java.awt.*;
public class test46 {
public static void main(String[] args) {
Frame frame=new Frame();
Button button1=new Button("CENTER");
Button button2=new Button("NORTH");
Button button3=new Button("EAST");
Button button4=new Button("SOUTH");
Button button5=new Button("WEST");
frame.add(button1,BorderLayout.CENTER);//中
frame.add(button2,BorderLayout.NORTH);//北
frame.add(button3,BorderLayout.EAST);//东
frame.add(button4,BorderLayout.SOUTH);//南
frame.add(button5,BorderLayout.WEST);//西
frame.setSize(200,200);
frame.setVisible(true);
}
}
表格布局:GridLayout
package com.text;
import java.awt.*;
public class test48 {
public static void main(String[] args) {
Frame frame=new Frame();
frame.setLayout(new GridLayout(2,2));//表示两行两列
Button button1=new Button();
Button button2=new Button();
Button button3=new Button();
Button button4=new Button();
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.setVisible(true);
}
}
练习:
使用混合布局实现以下布局:
答案:
package com.text;
import java.awt.*;
public class test47 {
public static void main(String[] args) {
//设置窗口
Frame frame=new Frame();
Panel panel1=new Panel(new GridLayout(2,1));
Panel panel2=new Panel(new BorderLayout());
Panel panel3=new Panel(new GridLayout(2,2));
Panel panel4=new Panel(new BorderLayout());
//设置面板1,2
Button button1=new Button("button");
Button button2=new Button("button");
Button button3=new Button("button");
Button button4=new Button("button");
panel1.add(button1);
panel1.add(button2);
panel2.add(button3,BorderLayout.WEST);//西
panel2.add(panel1,BorderLayout.CENTER);//中
panel2.add(button4,BorderLayout.EAST);//东
//设置面板3,4
Button button5=new Button("button");
Button button6=new Button("button");
Button button7=new Button("button");
Button button8=new Button("button");
Button button9=new Button("button");
Button button10=new Button("button");
panel3.add(button5);
panel3.add(button6);
panel3.add(button7);
panel3.add(button8);
panel4.add(button9,BorderLayout.WEST);//西
panel4.add(panel3,BorderLayout.CENTER);//中
panel4.add(button10,BorderLayout.EAST);//东
frame.setLayout(new GridLayout(2,1));
frame.add(panel2);
frame.add(panel4);
frame.pack();
frame.setVisible(true);
}
}
事件监听
按钮事件监听:ActionListener接口
package com.text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class test49 {
public static void main(String[] args) {
Frame frame=new Frame();
Button button1=new Button("static");
Button button2=new Button("top");
button1.addActionListener(new test());
button2.addActionListener(new test());
//添加监听事件
frame.add(button1,BorderLayout.SOUTH);
frame.add(button2,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
}
class test implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {//执行动作表示点击后会发生什么
if (e.getActionCommand().equals("static")){//这里e.getActionCommand()表示获取的名字
System.out.println("启动");
}
if (e.getActionCommand().equals("top")){
System.out.println("停止");
}
}
}