java—AWT

news2025/2/24 10:08:33

 AWT

课程:1、GUI编程简介_哔哩哔哩_bilibili

一.介绍 

  1. 包含了很多类和接口!GUI!
  2. 元素:窗口、按钮、文本框
  3. java.awt

二.窗口

1.构造

2.方法 

        // 实例化frame类
        Frame frame = new Frame("这个一个框");

        // 设置可见性
        frame.setVisible(true);

        // 设置窗口大小
        frame.setSize(500, 500);

        // 设置窗口背景颜色,实例化Color类
        frame.setBackground(new Color(50, 70, 300));

        // 设置窗口的弹出位置
        frame.setLocation(300, 300);

        // 设置窗口大小不可拖动改变
        frame.setResizable(false);

效果:

问题:无法关闭窗口,停止java程序 

 多个frame

我们先写一个frame的封装类:

import java.awt.*;

public 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);
        
        // 设置窗口大小与弹出位置,使用Bounds可以同时设置
        setBounds(x, y, w, h);
        
        // 设置窗口背景颜色
        setBackground(color);
    }
}

 再写测试类:

public class Application {
    public static void main(String[] args) {

        MyFrame myFrame1 = new MyFrame(100, 100, 400, 400, Color.black);
        MyFrame myFrame2 = new MyFrame(500, 100, 400, 400, Color.red);
        MyFrame myFrame3 = new MyFrame(100, 500, 400, 400, Color.blue);
        MyFrame myFrame4 = new MyFrame(500, 500, 400, 400, Color.green);
    }
}

效果:

三.panel 面板  

 1.构造

2.方法 

  • frame中放置一个固定面板
            // 先完成窗口的设置
            Frame frame = new Frame();
            frame.setVisible(true);
            frame.setBounds(300, 300, 500, 500);
            frame.setBackground(new Color(128, 253, 190));
    
    
            // 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
            frame.setLayout(null);
    
            // 面板的设置与窗口一样,但是面板在窗口里面要注意位置与大小
            // Panel是面板,可以放在窗口中,不能单独存在
            Panel panel = new Panel();
            frame.setVisible(true);
            panel.setBounds(50, 50, 400, 400);
            panel.setBackground(new Color(238, 47, 142));
    
            // 添加面板进窗口,
            frame.add(panel);

    效果:

 解决无法关闭窗口停止java程序,可以使用下面的方法看不懂跳过后面还会再讲

package com.demo.panel;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class PanelTest {

    public static void main(String[] args) {

        panelTest();
    }


    public static void panelTest() {
        // 先完成窗口的设置
        Frame frame = new Frame();
        frame.setVisible(true);
        frame.setBounds(300, 300, 500, 500);
        frame.setBackground(new Color(128, 253, 190));


        // 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
        frame.setLayout(null);

        // 面板的设置与窗口一样,但是面板在窗口里面要注意位置与大小
        // Panel是面板,可以放在窗口中,不能单独存在
        Panel panel = new Panel();
        frame.setVisible(true);
        panel.setBounds(50, 50, 400, 400);
        panel.setBackground(new Color(238, 47, 142));

        // 添加面板进窗口,
        frame.add(panel);

        // 设置窗口关闭,可以自己写一个窗口监听
        
        // 监听事件:监听窗口关闭事件 关闭:System.exit(0)
        // 适配器模式:用Adapter类重写方法    只有一个方法的监听接口没有适配器
      
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // 窗口点击关闭的时候需要做的事,退出程序
                System.exit(0);
            }
        });
    }
}

四.四种布局管理器与按钮

按钮的构造器 

Constructor and Description
Button()

构造一个带有标签的空字符串的按钮。

Button(String label)

构造具有指定标签的按钮。

方法

Modifier and TypeMethod and Description
voidaddActionListener(ActionListener l)

添加指定的动作侦听器以从此按钮接收动作事件。

voidaddNotify()

创建按钮的对等体。

AccessibleContextgetAccessibleContext()

获取 AccessibleContext与此相关 Button 。

StringgetActionCommand()

返回此按钮触发的操作事件的命令名称。

ActionListener[]getActionListeners()

返回在此按钮上注册的所有动作侦听器的数组。

StringgetLabel()

获取此按钮的标签。

<T extends EventListener>
T[]
getListeners(类<T> listenerType)

返回当前注册为 FooListener的所有对象的数组,在此 Button 。

protected StringparamString()

返回一个代表此 Button状态的字符串。

protected voidprocessActionEvent(ActionEvent e)

通过将此按钮分派到任何已注册的 ActionListener对象来处理此按钮上发生的操作事件。

protected voidprocessEvent(AWTEvent e)

处理此按钮上的事件。

voidremoveActionListener(ActionListener l)

删除指定的动作侦听器,使其不再从此按钮接收到动作事件。

voidsetActionCommand(String command)

设置此按钮触发的操作事件的命令名称。

voidsetLabel(String label)

将按钮的标签设置为指定的字符串。

1.空布局(绝对布局) 

前面我们使用的是空布局,如下 

// 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
        frame.setLayout(null);

2.流式布局

从左到右从上到下

public static void main() {

        Frame frame = new Frame();

        // 按钮
        Button button1 = new Button("按钮1");
        Button button2 = new Button("按钮2");
        Button button3 = new Button("按钮3");

        // FlowLayout:流式布局 从左到右从上到下
        // frame.setLayout(new FlowLayout(FlowLayout.LEFT));// 向左
        // frame.setLayout(new FlowLayout()); // 中间
        frame.setLayout(new FlowLayout(FlowLayout.RIGHT));// 向右

        // 设置可见度与大小
        frame.setVisible(true);
        frame.setSize(200,200);

        // 添加按钮
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        
    }

3.空间布局

东西南北中 

 public static void main() {

        Frame frame1 = new Frame("BorderLayout布局");

        // 组件--按钮
        Button east = new Button("East");
        Button west = new Button("West");
        Button south= new Button("South");
        Button north = new Button("North");
        Button center = new Button("Center");

        // 设置可见度与大小
        frame1.setVisible(true);
        frame1.setSize(200,200);

        // 添加按钮
        // BorderLayout:空间布局 东西南北中 南北是拉满的 有南北的情况下左右不一定拉满了
        frame1.add(east,BorderLayout.EAST);
        frame1.add(west,BorderLayout.WEST);
        frame1.add(south,BorderLayout.SOUTH);
        frame1.add(north,BorderLayout.NORTH);
        frame1.add(center,BorderLayout.CENTER);
    }

4.网格布局

几行几列 根据多少,列会产生变化 

 public static void main() {

        Frame frame2 = new Frame("GridLayout布局");

        //组件--按钮
        Button button1 = new Button("1");
        Button button2 = new Button("2");
        Button button3 = new Button("3");
        Button button4 = new Button("4");
        Button button5 = new Button("5");
        Button button6 = new Button("6");

        //设置布局GridLayout  new GridLayout(行,列,行间隔,列间隔)
        frame2.setLayout(new GridLayout(3,2));

        // 设置可见度
        frame2.setVisible(true);

        // 添加按钮
        frame2.add(button1);
        frame2.add(button2);
        frame2.add(button3);
        frame2.add(button4);
        frame2.add(button5);
        frame2.add(button6);

        // 使用pack()方法可以自动调节大小和布局大小
        frame2.pack();
    }

5.练习 

请用30分钟做以下内容 

思路讲解:6、课堂练习讲解及总结_哔哩哔哩_bilibili 

 public static void main() {

        // 一.外层窗口
        Frame frame3 = new Frame();
        // 设置可见度,弹出位置,大小,颜色
        frame3.setVisible(true);
        frame3.setBounds(200,200,200,300);
        frame3.setBackground(Color.BLACK);
        // 设置布局
        frame3.setLayout(new GridLayout(2,1));


        // 二.设置四个面板
        // 上面的面板
        Panel p1 = new Panel(new BorderLayout());
        // 上面中间的面板
        Panel p2 = new Panel(new GridLayout(2,1));
        // 下面的面板
        Panel p3 = new Panel(new BorderLayout());
        // 下面中间的面板
        Panel p4 = new Panel(new GridLayout(2,2));

        // 三.设计上面的面板
        p1.add(new Button("上左"),BorderLayout.WEST);
        p1.add(new Button("上右"),BorderLayout.EAST);
        p2.add(new Button("上中一"));
        p2.add(new Button("上中二"));
        p1.add(p2,BorderLayout.CENTER);

        // 四.设计下面的面板
        p3.add(new Button("下左"),BorderLayout.WEST);
        p3.add(new Button("下右"),BorderLayout.EAST);
        for (int i = 0; i < 4; i++) {
            p4.add(new Button("for-"+i));
        }
        p3.add(p4,BorderLayout.CENTER);

        // 五.将上下拼凑起来
        frame3.add(p1);
        frame3.add(p3);

        frame3.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // 窗口点击关闭的时候需要做的事,退出程序
                System.exit(0);
            }
        });

    }

由于中文的字符编码问题,我的结果中的中文没有显示出来,全部变成了正方形

 五.事件监听

Modifier and TypeMethod and Description
voidactionPerformed(ActionEvent e)

发生动作时调用。

 1.按钮监听

package com.demo.panel;

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 ActionEventTest {

    public static void main(String[] args) {
        actionEventTest();
    }


    // 事件监听  按下按钮 触发一些事件
    public static void actionEventTest() {

        // 1.窗口与布局
        Frame frame = new Frame("开始-停止");

        frame.setVisible(true);
        frame.setLayout(new GridLayout(2,1));

        // 2.按钮
        Button button1 = new Button("start");
        Button button2 = new Button("stop");

        // 4.设置按钮信息
        button1.setActionCommand("start");

        // 5.实例化myMonitor与,两个按钮同用一个事件
        myMonitor myMonitor = new myMonitor();
        button1.addActionListener(myMonitor);
        button2.addActionListener(myMonitor);

        // 6.按钮添加到窗口
        frame.add(button1);
        frame.add(button2);
        frame.pack();


        // 8.调用关闭窗口事件
        windowClose(frame);


    }

    // 7.关闭窗口的事件,单独写成一个方法
    private static void windowClose(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

}


// 3.按钮事件监听器,需要实现ActionListener接口,并重新actionPerformed方法
class myMonitor implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {

        System.out.println("按钮button被点击了:"+e.getActionCommand());
    }
}

 2.输入框事件监听与文本框

构造方法
Constructor and Description
TextField()

构造一个新的文本字段。

TextField(int columns)

构造具有指定列数的新的空文本字段。

TextField(String text)

构造一个使用指定文本初始化的新文本字段。

TextField(String text, int columns)

构造一个新的文本字段,并使用指定的文本进行初始化,以便显示,并且足够宽以容纳指定的列数。

                                                               方法摘要

Modifier and TypeMethod and Description
voidaddActionListener(ActionListener l)

添加指定的动作侦听器以从此文本字段接收动作事件。

voidaddNotify()

创建TextField的对等体。

booleanechoCharIsSet()

指示此文本字段是否具有用于回显的字符集。

AccessibleContextgetAccessibleContext()

获取与此TextField关联的AccessibleContext。

ActionListener[]getActionListeners()

返回在此文本域中注册的所有操作侦听器的数组。

intgetColumns()

获取此文本字段中的列数。

chargetEchoChar()

获取要用于回显的字符。

<T extends EventListener>
T[]
getListeners(类<T> listenerType)

返回当前注册的所有对象的数组 FooListener在这个S TextField 。

DimensiongetMinimumSize()

获取此文本字段的最小尺寸。

DimensiongetMinimumSize(int columns)

获取具有指定列数的文本字段的最小尺寸。

DimensiongetPreferredSize()

获取此文本字段的首选大小。

DimensiongetPreferredSize(int columns)

使用指定的列数获取此文本字段的首选大小。

DimensionminimumSize()已弃用

从JDK 1.1版开始,替换为getMinimumSize() 。

DimensionminimumSize(int columns)已弃用

截至JDK 1.1版,由getMinimumSize(int) 。

protected StringparamString()

返回表示此 TextField的状态的字符串。

DimensionpreferredSize()已弃用

从JDK 1.1版开始,由getPreferredSize() 。

DimensionpreferredSize(int columns)已弃用

截至JDK 1.1版,由getPreferredSize(int) 。

protected voidprocessActionEvent(ActionEvent e)

通过将这些事件发送到任何已注册的 ActionListener对象来处理在此文本字段上发生的操作事件。

protected voidprocessEvent(AWTEvent e)

处理此文本字段上的事件。

voidremoveActionListener(ActionListener l)

删除指定的动作监听器,使其不再从此文本字段接收到动作事件。

voidsetColumns(int columns)

设置此文本字段中的列数。

voidsetEchoChar(char c)

设置此文本字段的回音字符。

voidsetEchoCharacter(char c)已弃用

从JDK 1.1版开始,替换为setEchoChar(char) 。

voidsetText(String t)

将此文本组件呈现的文本设置为指定的文本。

package com.demo.panel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestTest01 {
    public static void main(String[] args) {
        // 调用构造器
        new MyFrame();
    }
}

class  MyFrame extends Frame{
    // 构造器(无参)
    public MyFrame()  {
        //设置窗口的标题
        //利用super访问父类构造方法
        super("请输入密码");
        TextField textField = new TextField();
        // 因为继承了Frame,使用方法可以直接调用
        add(textField);
        //监听这个文本框输入的文字
        textField.addActionListener(new MyActionListenerTextField());
        // 设置替换编码
        textField.setEchoChar('*');
        // 设置窗口
        setBounds(200,200,200,200);
        setVisible(true);
    }
}

class MyActionListenerTextField implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        //获得一些资源,返回一个对象  向下转型获取事件源e.getSource()的返回值是object
        TextField textField = (TextField) e.getSource();
        // 获得输入框的文本
        System.out.println(textField.getText());
        // 换行清空与后台显示密码
        textField.setText("");

    }
}

3.练习简单加法计算器和标签

构造方法
Constructor and Description
Label()

构造一个空标签。

Label(String text)

用指定的文本字符串构造一个新的标签,左对齐。

Label(String text, int alignment)

构造一个新的标签,以指定的对齐方式显示指定的文本字符串。

 方法

voidaddNotify()

创建此标签的对等体。

AccessibleContextgetAccessibleContext()

获取与此Label相关联的AccessibleContext。

intgetAlignment()

获取此标签的当前对齐方式。

StringgetText()

获取此标签的文本。

protected StringparamString()

返回表示此 Label的状态的字符串。

voidsetAlignment(int alignment)

将此标签的对齐方式设置为指定的对齐方式。

voidsetText(String text)

将此标签的文本设置为指定的文本。

package com.demo.panel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CalcTest {
    public static void main(String[] args) {

        new MyCalcTest().loadFrame();
    }
}

class MyCalcTest extends Frame{
    // 调用父类构造设置标题
    public MyCalcTest() {
        super("简单加法计算器");
    }

    TextField num1,num2,num3;

    public void loadFrame() {
        // 设置小组件
         num1 = new TextField(10);
         num2 = new TextField(10);
         num3 = new TextField(20);
        Button button = new Button("=");
        Label label = new Label("+");

        // 布局
        setLayout(new FlowLayout());
        setVisible(true);
        pack();
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);

        // 监听按钮
        button.addActionListener(new MyCalcListener());

    }

    // 内部类实现监听
    public class MyCalcListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            // 实现加法,使用包装类将String类型转换成int
            int n1 = Integer.parseInt(num1.getText());
            int n2 = Integer.parseInt(num2.getText());
            // 两数相加,回车输出结果
            num3.setText(""+(n1+n2));
        }
    }
}

4.画笔paint 

package com.demo.panel;

import java.awt.*;

public class PaintTest {
    public static void main(String[] args) {

        new MyPaintTest().loadPaint();
    }
}

class MyPaintTest extends Frame{
    // 画板
   public void loadPaint() {
       setTitle("Paint");
       setBounds(200,200,600,500);
       setVisible(true);
   }

   // 画笔,重写paint()方法
    //画笔方法 paint创建窗口后,默认只执行一次
    @Override
    public void paint(Graphics g) {
       // 选择颜色
        g.setColor(Color.GREEN);
        // 选择图像
        g.fillOval(100,100,100,100);
        // 养成习惯,画笔用完,将它还原成最初的颜色
        g.setColor(Color.black);
    }
}

5.鼠标监听与Point

Modifier and TypeMethod and Description
voidmouseClicked(MouseEvent e)

在组件上单击(按下并释放)鼠标按钮时调用。

voidmouseEntered(MouseEvent e)

当鼠标进入组件时调用。

voidmouseExited(MouseEvent e)

当鼠标退出组件时调用。

voidmousePressed(MouseEvent e)

在组件上按下鼠标按钮时调用。

voidmouseReleased(MouseEvent e)

在组件上释放鼠标按钮时调用。

构造方法
Constructor and Description
Point()

构造并初始化坐标空间原点(0,0)的点。

Point(int x, int y)

构造并初始化坐标空间中指定的 (x,y)位置的点。

Point(Point p)

构造和初始化与指定的 Point对象相同位置的点。

                                                                       方法 

doublegetX()

返回这个 Point2D的X坐标在 double精度。

doublegetY()

返回这个 Point2D的Y坐标在 double精度。

package com.demo.panel;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class MouseListenerTest {

    public static void main(String[] args) {

        new MyFrame2("画画");
    }
}

class MyFrame2 extends Frame{

    // 需要一个集合来存储画笔画出点的(X,Y)坐标
    ArrayList<Point> points;

    // 设置画板(窗口)
    public MyFrame2(String s)  {
        // 调用父类的构造器,参数为名字
        super(s);
        setBounds(200,200,400,300);
        setVisible(true);

        // 存储点的坐标
         points = new ArrayList<>();

        // 鼠标监听器,正对这个画板(窗口)
        addMouseListener(new MyMouseListener());
    }

    // 画笔
    @Override
    public void paint(Graphics g) {
        // 利用迭代器遍历,读取点的坐标
        Iterator<Point> iterator = points.iterator();
        while (iterator.hasNext()){
            Point point=iterator.next();
            // 设置颜色与点的大小
            g.setColor(Color.PINK);
            g.fillOval(point.x,point.y,10,10);
        }
    }

    // 将点添加到画板上
    public void addPaint(Point point) {
        points.add(point);
    }


    // 适配器模式
    private class MyMouseListener extends MouseAdapter{
        // 鼠标监听事件:按下   弹起    按住不放
        @Override
        public void mousePressed(MouseEvent e) {
            // 鼠标按下时,运行这个方法
            MyFrame2 myFrame2=(MyFrame2) e.getSource();
            // 添加画点坐标
            myFrame2.addPaint(new Point(e.getX(),e.getY()));
            //因为paint方法只会自动调用一次,所以通过repaint刷新后重新调用paint方法
            //每次点击鼠标都需要重新画一次
            repaint();
        }

    }
}

6.窗口监听

Modifier and TypeMethod and Description
voidwindowActivated(WindowEvent e)

当窗口设置为活动窗口时调用。

voidwindowClosed(WindowEvent e)

当窗口关闭时调用窗口调用处理结果时调用。

voidwindowClosing(WindowEvent e)

当用户尝试从窗口的系统菜单中关闭窗口时调用。

voidwindowDeactivated(WindowEvent e)

当窗口不再是活动窗口时调用。

voidwindowDeiconified(WindowEvent e)

当窗口从最小化更改为正常状态时调用。

voidwindowIconified(WindowEvent e)

当窗口从正常状态更改为最小化状态时调用。

voidwindowOpened(WindowEvent e)

第一次调用窗口可见。

package com.demo.panel;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class WindowTest {

    public static void main(String[] args) {

        new WindowFrame();
    }
}

class WindowFrame extends Frame {
    public WindowFrame() {
        setBackground(Color.cyan);
        setBounds(200, 200, 300, 200);
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("点击x关闭");
                System.exit(0);
            }

            @Override
            public void windowActivated(WindowEvent e) {
                // 窗口激活事件:也就是当你点击到这个窗口内时,就是窗口激活了
                // 鼠标点击窗口外的地方(窗口变灰了),也就是离开了窗口
                WindowFrame source = (WindowFrame) e.getSource();
                source.setTitle("被再次激活了");
                System.out.println("windowActivated");
            }
        });

    }
}

7.键盘监听

Modifier and TypeMethod and Description
voidkeyPressed(KeyEvent e)

按下键时调用。

voidkeyReleased(KeyEvent e)

当键已被释放时调用。

voidkeyTyped(KeyEvent e)

键入键时调用。

package com.demo.panel;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyListenerTest {
    public static void main(String[] args) {

        new KeyFrame();
    }
}

class KeyFrame extends Frame{
    public KeyFrame() {
        setBounds(200,200,200,200);
        setVisible(true);
        // 在这个窗口监听键盘事件
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                // 读取键盘
                int keyCode = e.getKeyCode();
                // 输出
                System.out.println((char) keyCode);
                // 如果按到a就fuck
                if (keyCode == KeyEvent.VK_A ) {
                    System.out.println("fuck");
                }
            }
        });
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1416462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏设计模式

单列模式 概念 单例模式是一种创建型设计模式&#xff0c;可以保证一个类只有一个实例&#xff0c;并提供一个访问该实例的全局节点。 优点 可以派生&#xff1a;在单例类的实例构造函数中可以设置以允许子类派生。受控访问&#xff1a;因为单例类封装他的唯一实例&#xf…

Cyberdog2 docker环境软件源无法被验证问题

搭建docker系统后更新软件源sudo apt-get update出现异常 经过查询GPT&#xff0c;使用如下方式成功解决 从keyserver.ubuntu.com获取缺失的公钥&#xff0c;并添加到apt-key中。具体命令如下&#xff1a; gpg --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C6…

C++的关键字,命名空间,缺省参数,函数重载以及原理

文章目录 前言一、C关键字(C98)二、命名空间命名空间介绍命名空间的使用 三、C输入【cin】& 输出【cout】四、缺省参数缺省参数概念缺省参数分类缺省参数的使用小结一下 五、函数重载函数重载介绍函数重载类型 六、C支持函数重载的原理--名字修饰(name Mangling)【重点】 前…

【开源】基于JAVA语言的智慧社区业务综合平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

[BUUCTF]-PWN:hitcon2014_stkof解析

又是一道堆题&#xff0c;先看保护 关键信息&#xff0c;64位&#xff0c;没开pie。再看ida 大致就是alloc创建堆块&#xff0c;free释放堆块&#xff0c;fill填充堆块内容&#xff0c;以及一个看起来没啥用的函数&#xff0c;当然我也没利用这个函数去解题 这里有两种解法 解…

Python tkinter (6) Listbox

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…

Java版大厂算法题1——数字颠倒

问题描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出&#xff0c;程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0。如果输入为100&#xff0c;则输出为001。 数据范围&#xff1a;0<n<(2^30)-1 * 输入描述&#xff1a;输入…

2023启示录|虚拟人这一年

图片&#xff5c;《银翼杀手 2049》剧照 作者丨程心 编辑丨罗辑 2023 年&#xff0c;大模型 “救活” 了很多行业&#xff0c;其中最为反转的&#xff0c;就是把虚拟数字人&#xff08;以下简称虚拟人&#xff09;从活死人墓里拉了出来。 还没开年&#xff0c;在 2022 年火…

保姆级教学:Java项目从0到1部署到云服务器

目录 1、明确内容 2、apt 2.1、apt 语法 2.2、常用命令 2.3、更新apt 3、安装JDK17 4、安装MySQL 4.1、安装 4.2、检查版本及安装位置 4.3、初始化MySQL配置⭐ 4.4、检查状态 4.5、配置远程访问⭐ 4.6、登录MySQL 4.7、测试数据库 4.8、设置权限与密码⭐ 5、安…

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…

0127-2-Vue深入学习5—Vue-Router路由模式

1、Vue-Router三种路由模式&#xff1a; hash&#xff1a;#️⃣使用URL hash 值来做路由&#xff0c;支持所有路由器&#xff1b;history:&#x1f4d6;依赖HTML5 History API和服务器配置&#xff1b;abstract:⛓支持所有JS运行环境&#xff0c;Node.js服务端&#xff1b; 1.1…

基于springboot+vue+mysql+mybatis的博客系统源码+数据库

pb-cms 介绍 博客系统&#xff0c;架构&#xff1a;springbootvuemysqlmybatis 软件架构 软件架构说明 系统截图 技术选型 技术版本说明Spring Boot2.1.6MVC核心框架Spring Security oauth22.1.5认证和授权框架MyBatis3.5.0ORM框架MyBatisPlus3.1.0基于mybatis&#xff0…

HCIA-HarmonyOS设备开发认证-3.内核基础

目录 前言目标一、进程与线程待续。。。 前言 对于任何一个操作系统而言&#xff0c;内核的运行机制与原理是最为关键的部分。本章内容从多角度了解HarmonyOS的内核运行机制&#xff0c;涵盖进程与线程的概念&#xff0c;内存管理机制&#xff0c;网络特性&#xff0c;文件系统…

高级CPU(提高CPU运行速度)

晶体管 早期是加快晶体管切换速度,来提升CPU速度 增加电路 给CPU专门的除法电路其他电路来做复杂操作 缓存&#xff08;cache&#xff09; 给CPU加缓存&#xff08;cache&#xff09;,提高数据存取速度,更快送给CPU&#xff0c;因为处理器里空间不大所以缓存一般只有KB或M…

BGP:03 BGP路由

这是实验拓扑&#xff0c;IBGP 利用环回口建立邻居&#xff0c;IGP 协议为 OSPF&#xff0c; EBGP 通过物理接口建立邻居 基本配置&#xff1a; R1: sys sysname R1 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 int loop 0 ip ad…

基于SSM的网络办公系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的网络办公系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

c语言基础6

1.逗号表达式 逗号表达式&#xff0c;就是用逗号隔开的多个表达式。 逗号表达式&#xff0c;从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。 我们来看下面的一个代码&#xff1a; int main() {int a 1;int b 2;int ret (a > b, a b 2, b, b a 1);p…

shell脚本基础之函数与数组详解

目录 一、shell函数 1、shell函数的概念 2、shell函数的用法 2.1 定义函数 2.2 调用函数 2.3 函数作用范围 2.3.1 调用函数的范围 2.3.2 全局作用域和局部作用域 3、 函数返回值 3.1 系统默认的返回值 3.2 return语句 4、函数传参 5、查看函数列表 6、删除函数 …

RC4Drop加密:提升数据保护的新选择

摘要&#xff1a;RC4Drop是一种基于RC4算法的加密技术&#xff0c;通过将明文数据分成多个部分并进行加密&#xff0c;实现了对数据的高效保护。本文将对RC4Drop加密技术的优缺点进行详细分析&#xff0c;并给出一个Java完整demo示例。 RC4Drop加密解密 | 一个覆盖广泛主题工具…

kafka-顺序消息实现

kafka-顺序消息实现 场景 在购物付款的时候&#xff0c;订单会有不同的订单状态&#xff0c;对应不同的状态事件&#xff0c;比如&#xff1a;待支付&#xff0c;支付成功&#xff0c;支付失败等等&#xff0c;我们会将这些消息推送给消息队列 &#xff0c;后续的服务会根据订…