GUI编程
1、简介
Gui的核心技术Swing AWT
-
界面不美观
-
需要jre环境
2、AWT
-
包含了很多类和接口!
-
元素:窗口,按钮,文本框
-
java.awt
2.1、组件和容器
1.Frame

停止Java程序关闭窗口
封装多窗口:
package com;
import java.awt.*;
public class TestFrame2 {
public static void main(String[] args) {
//多个窗口
MyFrame myFrame1 = new MyFrame(100, 100, 200, 200, Color.blue);
MyFrame myFrame2 = new MyFrame(300, 100, 200, 200, Color.red);
MyFrame myFrame3 = new MyFrame(100, 300, 200, 200, Color.white);
MyFrame myFrame4 = new MyFrame(300, 300, 200, 200, Color.yellow);
}
}
class MyFrame extends Frame{
static int id = 0;
public MyFrame(int x,int y,int w,int h,Color color) {
super("MyFrame+"+(++id));
setVisible(true);
setBounds(x,y,w,h);
setBackground(color);
}
}
![]()
2.面板panel
package com;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//坐标
frame.setBounds(300,300,500,500);
frame.setBackground(Color.blue);
//panel设置坐标
panel.setBounds(50,50,400,400);
panel.setBackground(Color.red);
//frame.add(panel)
frame.add(panel);
frame.setVisible(true);
//监听窗关闭
frame.addWindowListener(new WindowAdapter() {

3.布局管理器
-
流式布局
package com;
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
frame.setLayout(new FlowLayout(FlowLayout.CENTER));
frame.setSize(200,200);
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
}![]()
-
东西南北中布局
package com;
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button East = new Button();
Button West = new Button();
Button South = new Button();
Button North = new Button();
Button Center = new Button();
frame.add(East,BorderLayout.EAST);
frame.add(West,BorderLayout.WEST);
frame.add(South,BorderLayout.SOUTH);
frame.add(North,BorderLayout.NORTH);
frame.add(Center,BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(200,200);
}
}![]()
-
表格布局
package com;
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button one = new Button("one");
Button two = new Button("two");
Button three = new Button("three");
Button four = new Button("four");
Button five = new Button("five");
Button six = new Button("six");
frame.setLayout(new GridLayout(3,2));
frame.add(one);
frame.add(two);
frame.add(three);
frame.add(four);
frame.add(five);
frame.add(six);
frame.setVisible(true);
frame.pack();//自动布局
}
}
![]()
package com;
import java.awt.*;
public class ExDemo {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setSize(400,300);
frame.setLocation(300,200);
frame.setBackground(new Color(90, 37, 37));
frame.setVisible(true);
frame.setLayout(new GridLayout(2,1));
Panel panel1 = new Panel(new BorderLayout());
Panel panel2 = new Panel(new GridLayout(2,1));
Panel panel3 = new Panel(new BorderLayout());
Panel panel4 = new Panel(new GridLayout(2,1));
panel1.add(new Button("East-1"),BorderLayout.EAST);
panel1.add(new Button("West-2"),BorderLayout.WEST);
panel2.add(new Button("p2-1"));
panel2.add(new Button("p2-2"));
panel1.add(panel2,BorderLayout.CENTER);
panel3.add(new Button("East-2"),BorderLayout.EAST);
panel3.add(new Button("West-2"),BorderLayout.WEST);
for (int i = 0; i < 4; i++) {
panel4.add(new Button("for-"+i));
}
panel3.add(panel4,BorderLayout.CENTER);
frame.add(panel1);
frame.add(panel3);
}
}

总结:
-
Frame是一个顶级窗口
-
Panel无法单独显示,必须添加到某个容器中
-
布局管理器
-
流式
-
东西南北中
-
表格
-
-
大小,定位,背景颜色,可见性,监听
4.事件监听
事件监听:当某个事件发生的时候,干什么?
package com;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestAxctionEvent {
public static void main(String[] args) {
Frame frame = new Frame();
Button button = new Button();
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener );
frame.add(button,BorderLayout.CENTER);
frame.pack();
windowCloss(frame);
frame.setVisible(true);
}
//事件监听
private static void windowCloss(Frame frame){
frame.addWindowListener(new WindowAdapter() {

多个按钮只写一个监听类
package com;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestAction {
public static void main(String[] args) {
Frame frame = new Frame("开始-停止");
Button button1 = new Button("start");
Button button2 = new Button("stop");
Mymonitor mymonitor = new Mymonitor();
button1.addActionListener(mymonitor);
button2.addActionListener(mymonitor);
frame.add(button1,BorderLayout.NORTH);
frame.add(button2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
class Mymonitor implements ActionListener{







浙公网安备 33010602011771号