GUI的组件
1.窗口、弹窗、面板、文本框、列表框、按钮、图片、监听事件
一、简介
GUI的核心技术:Swing、AWT
1.界面不美观 2.需要jre
目的:1.写出需要的小工具 2.了解MVC、了解监听
二、AWT
1.AWT简介:有很多接口和类
2.元素:
3,frame
package GUI;
import java.awt.*;
public class TextFrame {
public static void main(String[] args) {
Frame frame = new Frame("第一个窗口");
//设置窗口可见性
frame.setVisible(true);
//设置窗口大小
frame.setSize(400,400);
//设置颜色
frame.setBackground(new Color(85,150,68));
//弹出位置
frame.setLocation(200,200);
//设置大小固定
frame.setResizable(false);
}
}
存在一个问题,关不掉
多个窗口
package GUI;
import java.awt.*;
public class TextFrame2 {
public static void main(String[] args) {
MyFrame myFrame1 = new MyFrame(100,100,100,100,Color.DARK_GRAY);
MyFrame myFrame2 = new MyFrame(300,100,100,100,Color.DARK_GRAY);
MyFrame myFrame3 = new MyFrame(100,300,100,100,Color.DARK_GRAY);
MyFrame myFrame4 = new MyFrame(300,300,100,100,Color.DARK_GRAY);
}
}
class MyFrame extends Frame
{
static int id = 0;
public MyFrame(int x,int y,int h,int w,Color color){
super("id"+ (++id));
setVisible(true);
setBounds(x,y,w,h);
setBackground(color);
}
}
4.panel(面板)
可以看成一个空间,不能单独存在,只能存在在frame上
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TextPanle {
public static void main(String[] args) {
Frame frame = new Frame();
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//设置坐标、
frame.setBounds(100,100,100,100);
frame.setBackground(Color.GREEN);
//相对于frame设置面板坐标
panel.setBounds(50,50,50,50);
//设置panel颜色
panel.setBackground(new Color(215, 14, 14));
frame.add(panel);
frame.setVisible(true);
//监听 System.exit(0)
//关闭事件
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
解决了关闭事件
5.布局管理器(layout)
流式布局:从左到右
package GUI;
import java.awt.*;
public class TextFlowLayout {
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.setBounds(200,200,200,200);
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
}
东南西北中
package GUI;
import java.awt.*;
public class TextBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
frame.setBounds(100,100,100,100);
Button east = new Button("east");
Button west = new Button("west");
Button north = new Button("north");
Button south = new Button("south");
Button center = new Button("center");
frame.add(east,BorderLayout.EAST);
frame.add(west,BorderLayout.WEST);
frame.add(north,BorderLayout.NORTH);
frame.add(south,BorderLayout.SOUTH);
frame.add(center,BorderLayout.CENTER);
frame.setVisible(true);
}
}
表格布局
package GUI;
import java.awt.*;
public class TextGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("TextGridLayout");
frame.setBounds(100, 100, 100, 100);
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
Button button4 = new Button("button4");
frame.setLayout(new GridLayout(3, 2));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.pack();//Java函数
frame.setVisible(true);
}
}
6.事件监听
package GUI;
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 TextAcitonEvent {
public static void main(String[] args) {
//按下按钮,发生事件
Frame frame = new Frame();
Button button = new Button();
//因为addActionListener需要一个ActionListener
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
frame.add(button,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
windowClose(frame);
}
private static void windowClose(Frame frame)
{
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
System.out.print("aaa");
}
}
多个按钮只写一个监听类
package GUI;
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 TextAcitonEvent {
public static void main(String[] args) {
//按下按钮,发生事件
Frame frame = new Frame();
Button button1 = new Button("button1");
Button button2 = new Button("button2");
//可以显示定义,不定义则走默认标签
button2.setActionCommand("renew-button2");
MyActionListener myActionListener = new MyActionListener();
//多个按钮只写一个监听类
button1.addActionListener(myActionListener);
button2.addActionListener(myActionListener);
frame.add(button1,BorderLayout.NORTH);
frame.add(button2,BorderLayout.SOUTH);
frame.setVisible(true);
windowClose(frame);
}
//关闭事件
private static void windowClose(Frame frame)
{
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
//监听触发
class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
System.out.print("aaa "+e.getActionCommand());
}
}
7.输入框 textField
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextField {
public static void main(String[] args) {
//main方法里只有启动
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame()
{
TextField textField = new TextField();
add(textField);
//监听这个文本框输入的文字
textField.addACtionListener(myActionListener2);
}
}
class MyActionListener2 implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
e.getSource();
}
}
7.简易计算器
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextCal {
public static void main(String[] args) {
Calculator calculator = new Calculator();
}
}
class Calculator extends Frame
{
//三个文本框、一个按钮、一个标签
public Calculator()
{
TextField num1 = new TextField(10);
TextField num2 = new TextField(10);
TextField num3 = new TextField(10);
Button button = new Button("=");
button.addActionListener(new MyCalculatorListener(this));
Label label = new Label("+");
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
//监听器
class MyCalculatorListener implements ActionListener
{
Calculator calculator = null;
public MyCalculatorListener(Calculator calculator)
{
this.calculator = calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(calculator.num1.getText());
int n2 = Integer.parseInt(calculator.num2.getText());
calculator.num3.setText(""+(n1+n2));
num3.setText(""+(n1+n2));
num1.setText("");
num2.setText("");
}
}