GUI编程
GUI 学习 (SWING,AWT)
(可能注解文字比较少,代码比较多,因为大部分都写在注解里了)
学习目的
重点在于学习一下监听机制
- 写一些自己喜欢的小工具
- 维护swing界面
- 了解MVC架构,了解监听
- 回顾一下java语法
康复训练
AWT
-
介绍
包含了很多类和接口
元素:窗口,按钮,文本框
包:java.awt
架构图
2.2
2.3 Frame
package gui.lesson1;
import java.awt.*;
//gui 第一个界面
public class testfram {
public static void main(String[] args){
//Frame
Frame test1=new Frame("my first java Figure Window");
//设置可见性
test1.setVisible(true);
//设置窗口大小
test1.setSize(400,400);
//设置背景颜色
test1.setBackground(Color.BLACK);
//弹出的初始位置
test1.setLocation(200,200);
//设置大小固定
test1.setResizable(false);
}
}
2.4 Panel
package gui.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
//可以看成空间
public class Test_panel {
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.green);
panel.setBounds(50,50,400,400);
panel.setBackground(Color.red);
frame.add(panel);
frame.setVisible(true);
//监听关闭事件
// e
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
2.5布局管理器
-
流式布局
-
东西南北中
-
表格布局
2.6 事件监听 :监控某件事情
可以多个按钮实现同一个监听
利用actionCommand 增加命令属性,
在监听的时候进行判断
2.7 输入框Test FIeld
package gui_lesson2;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test_text {
public static void main(String[] args) {
Myf myf = new Myf();
myf.setVisible(true);
myf.pack();
}
}
//设置个人面板来进行个性化设置
class Myf extends Frame {
public Myf() {
TextField textField = new TextField();
//这个是文本框
add(textField);
//下面的只是监听器
myac a = new myac();
//按下输入框默认成为事件
//设置编码
textField.setEchoChar('*');
textField.addActionListener(a);
setBounds(200, 200, 200, 200);
}
}
class myac implements ActionListener {
//继承一个事件监听器接口
@Override
//可以在这里设置一些对事件的操作内容
public void actionPerformed(ActionEvent e) {
//因为在测试文本框所以,类型强制转换为文本框类
TextField file = (TextField) e.getSource();//获取对应资源
System.out.println(file.getText());//输出文本框获得的文本
//回车之后清空输入框
file.setText("");
}
}
2.7 应用---->简易计算器
oop原则:组合大于继承
面向过程和面向对象(两种)
package gui_lesson3;
import javax.imageio.plugins.tiff.TIFFTagSet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
//主函数
public class Test_calc {
public static void main(String[] args) {
Calcu calcu = new Calcu();
}
}
//设置计算器类
class Calcu extends Frame{
//属性
TextField nu1;
TextField nu2;
TextField nu3;
Button bn;
Label label;
//方法
public Calcu(){
//三个文本框
nu1 =new TextField(10);//字符数
nu2 =new TextField(10);//字符数
nu3 =new TextField(10);//字符数
//一个按钮
bn = new Button("=");
bn.addActionListener(new mycalclis(this));
//一个标签
label = new Label("+");
//布局
setLayout(new FlowLayout());
add(nu1);
add(label);
add(nu2);
add(bn);
add(nu3);
setVisible(true);
pack();
setBounds(200,200,200,200);
}
}
//监听器类
class mycalclis implements ActionListener{
//获取三个变量的两种方法
//常规方法
/* private TextField nu1,nu2,nu3;
public mycalclis(TextField nu1,TextField nu2,TextField nu3){
this.nu1=nu1;
this.nu2=nu2;
this.nu3=nu3;
}
*/
//简便方法
//获取计算器整个类---->>组合
Calcu calcu =null;
public mycalclis(Calcu calcu){
this.calcu=calcu;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数
/*
int n1=Integer.parseInt(nu1.getText());
int n2=Integer.parseInt(nu2.getText());
*/
int n1=Integer.parseInt(calcu.nu1.getText());
int n2=Integer.parseInt(calcu.nu2.getText());
//输出第三个结果
calcu.nu3.setText(""+(n1+n2));
//清除两个框
calcu.nu1.setText("");
calcu.nu2.setText("");
}
}
可以设置内部类,
把监听器作为计算器的内部类 就可以直接实现内部传参数;
最大的好处,直接使用外部类参数
//设置计算器类
class Calcu extends Frame{
//属性
TextField nu1;
TextField nu2;
TextField nu3;
Button bn;
Label label;
//方法
public Calcu(){
//三个文本框
nu1 =new TextField(10);//字符数
nu2 =new TextField(10);//字符数
nu3 =new TextField(10);//字符数
//一个按钮
bn = new Button("=");
bn.addActionListener(new mycalclis());
//一个标签
label = new Label("+");
//布局
setLayout(new FlowLayout());
add(nu1);
add(label);
add(nu2);
add(bn);
add(nu3);
setVisible(true);
pack();
setBounds(200,200,200,200);
}
class mycalclis implements ActionListener{
//获取三个变量的两种方法
//常规方法
/* private TextField nu1,nu2,nu3;
public mycalclis(TextField nu1,TextField nu2,TextField nu3){
this.nu1=nu1;
this.nu2=nu2;
this.nu3=nu3;
}
*/
//简便方法
//获取计算器整个类---->>组合
@Override
public void actionPerformed(ActionEvent e) {
//获得加数
/*
int n1=Integer.parseInt(nu1.getText());
int n2=Integer.parseInt(nu2.getText());
*/
int n1=Integer.parseInt(nu1.getText());
int n2=Integer.parseInt(nu2.getText());
//输出第三个结果
nu3.setText(""+(n1+n2));
//清除两个框
nu1.setText("");
nu2.setText("");
}
}
}
Swing
init初始化操作
(标签居中)
package lesson_4;
import javax.swing.*;
import java.awt.*;
public class JFrameDemo {
public void init(){
//顶级窗口
JFrame frameDemo=new JFrame();
frameDemo.setVisible(true);
frameDemo.setBounds(100,100,200,200);
//设置文字
JLabel label = new JLabel("Jesus");
frameDemo.add(label);
//让文本居中
label.setHorizontalAlignment(SwingConstants.CENTER);
//容器实例化
Container container = frameDemo.getContentPane();
//关闭事件
frameDemo.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
//建立一个窗口
new JFrameDemo().init();
}
}
弹窗
package lesson_4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Bounds extends JFrame {
public Bounds(){
setVisible(true);
setSize(700,500);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container container =this.getContentPane();
//绝对布局
container.setLayout(null);
//按钮
JButton button = new JButton("bounds");
button.setBounds(30,30,200,50);
container.add(button);
//点击按钮的时候弹出一个弹窗
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹窗
new mydialog();
}
});
}
public static void main(String[] args) {
Bounds bounds = new Bounds();
}
}
//编写弹窗
class mydialog extends JDialog{
//Ctrl+o 快速重写父类方法
//不要乱用void
public mydialog(){
setBounds(100,100,500,500);
this.setVisible(true);
Container container = this.getContentPane();
container.setLayout(null);
container.add(new Label("what"));
}
}
此处省略了许多其他内容,但是无需深入学习,毕竟GUI已经退出舞台了 后期如有需要,可以再临时学一下对应语法
总结
虽然拖了很久,但还是学到了不少
浅学一下监听机制,为后期的框架学习做一点准备
最近有点懈怠了,需要警醒一下自己
本文链接:
/archives/1690959576387
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
打工人驿站!
喜欢就支持一下吧
打赏
微信
支付宝