【从零开始重学Java】第8_9_10天

发布时间 2024-01-09 17:51:49作者: 迷路的哨兵甲

前情提示

从零开始重学Java 第0天
从零开始重学Java 第1天
从零开始重学Java 第2天
从零开始重学Java 第3天
从零开始重学Java 第4天
从零开始重学Java 第5天
从零开始重学Java 第6天
从零开始重学Java 第7天

今天休息

AWT与Swing的布局管理器不是那么友好(非常难用...),目前唯一能用到的地方就是写IDEA插件,但IDEA插件会有一层封装过的JB开头的组件,相比原来的更好用,而且布局用的XML,相对方便调整

如果真的需要开发GUI客户端,不如学学C#的WPF,简单易上手,而且界面拖拖拽拽就出来了,exe还能打包好给别人用,发给其他人windows直接打开就能用,不依赖Java环境
何况还有Vue这种可以选,简单功能直接放在网页里实现
实在想不出AWT与Swing的学习必要性,唯一好处就是,只要你Java熟练以后,这些看两眼就能会

至于Applet,因为浏览器停止支持 NPAPI(Netscape 插件应用程序接口)因为会带来安全问题,Applet也就随着被废弃
取而代之的是基于HTML5、CSS3、JavaScript的现代网络技术
这也侧面说明了Java很笨重,很多对于标记语言来说很简单的事情,如果使用Applet实现就会十分复杂

Applet废弃

Java语言的图形用户界面设计

很久以前Swing写的一个栈演示器


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serial;
import java.util.Stack;

public class StackSimulation extends JFrame {

    public static void main(String[] args) {
        StackSimulation stackSimulation = new StackSimulation();
        stackSimulation.setVisible(true);
        stackSimulation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    
    @Serial
    private static final long serialVersionUID = 9094358252585099002L;
    private final JTextArea stackArea;
    private final JTextField inputField;

    private final Stack<String> stack;

    public StackSimulation() {
        // 初始化窗口
        setTitle("Stack Simulation");
        setSize(600, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建组件
        stackArea = new JTextArea();
        stackArea.setEditable(false);

        inputField = new JTextField();
        inputField.setPreferredSize(new Dimension(200,30));

        JButton pushButton = new JButton("Push");
        pushButton.addActionListener(new PushButtonListener());

        JButton popButton = new JButton("Pop");
        popButton.addActionListener(new PopButtonListener());

        // 设置布局
        setLayout(new BorderLayout());
        add(stackArea, BorderLayout.CENTER);

        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(inputField);
        panel.add(pushButton);
        panel.add(popButton);

        add(panel, BorderLayout.SOUTH);

        // 初始化栈
        stack = new Stack<>();

    }

    // 入栈按钮监听器
    private class PushButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String input = inputField.getText();
            stack.push(input);
            stackArea.setText(getStackInfo("入栈 " + input));
            inputField.setText("");
        }
    }

    // 出栈按钮监听器
    private class PopButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (!stack.isEmpty()) {
                String pop = stack.pop();
                stackArea.setText(getStackInfo("出栈 "+pop));
            }else {
                stackArea.setText("");
            }
        }
    }

    // 获取栈的信息
    private String getStackInfo(String firstLine) {
        System.out.println(firstLine);
        System.out.println(stack.toString());
        StringBuilder sb = new StringBuilder();
        sb.append(firstLine).append("\n");
        for (int i = stack.size() - 1; i >= 0; i--) {
            sb.append(stack.get(i)).append("\n");
        }
        return sb.toString();
    }
    
}

AWT与Swing

容器

顶层容器

使用JFrame创建一个应用程序

内容窗格

面板

布局

一个简单的例子

FlowLayout布局管理器

BorderLayout布局管理器

GridLayout布局管理器

CardLayout布局管理器

BoxLayout布局管理器

其他布局管理器

事件处理

一个简单的例子

FlowLayout布局管理器

BorderLayout布局管理器

GridLayout布局管理器

CardLayout布局管理器

BoxLayout布局管理器

其他布局管理器

第八章习题

Swing组件

按钮

普通按钮

切换按钮、复选按钮及单选按钮

标签

组合款

列表

文本组件

文本域

文本区

菜单组件

菜单栏

菜单

菜单项

复选菜单和单选菜单项

弹出式菜单

对话框、标准对话框与文件对话框

对话框

标准对话框

文件对话框

控制组件外观

颜色

字体

绘图

第九章习题

Java Applet

编写Applet

Applet的方法和Applet的生命周期

Applet的运行

import java.applet.*;
import java.awt.*;
 
public class HelloWorldApplet extends Applet {
    @Override
    public void init() {
        super.init();
        System.out.println("初始化");
    }

    @Override
    public void start() {
        super.start();
        System.out.println("启动");
    }
    @Override
    public void paint (Graphics g){
        System.out.println("运行");
        g.drawString ("Hello World", 25, 50);
    }

    @Override
    public void stop() {
        super.stop();
        System.out.println("结束");
    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("消亡");
    }

}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>applet检查</title>
</head>
<body>
    <applet code="HelloWorldApplet.class" height="300" width="300">
    </applet>
</body>
</html>

用于显示Applet的方法

appletviewer

HTML与<applet>标记

Applet参数的读取

Applet与URL

在Applet中的多媒体处理

在Applet中显示图像

在Applet中播放声音

Applet的事件处理

Applet与普通应用程序的结合

第十章习题