永州市网站建设_网站建设公司_展示型网站_seo优化
2026/1/16 17:04:38 网站建设 项目流程

Swing 编程

Swing 是 Java 基类的一部分,是基于 AWT 开发的;AWT 是 Java 语言开发用户界面程序的基本工具包,是 Swing 的基础。Swing 提供了大量的轻量级组件,还提供了一个用于实现包含插入式界面样式等特性的GUI的下层构件,使得 Swing 组件在不同的平台上都能够保持组件的界面样式特性。

由 Swing 提供的组件几乎都是轻量级组件,其中提供的少数重量级组件都是必需的。因为轻量级组件是绘制在包含它的容器中的,而不是绘制在它自己的窗口中的,所以,轻量级组件最终必须包含在一个重量级的容器中;因此,由 Swing 提供的小应用程序、窗体、窗口和对话框都必须是重量级组件,以便提供一个可以用来绘制 Swing 轻量级组件的窗口。

JFrame 窗体和常用面板

在编程中,可以将面板添加到 JFrame 窗体中,也可以将子面板添加到上级面板中,然后将组件添加到面板中。通过面板可以对所有组件进行分层管理,即对不同关系的组件采用不同的布局管理方式,使组件的布局更合理,软件的界面更美观。

JPanel 面板

如果将所有的组件都添加到由 JFrame 窗体提供的默认组件容器中,将存在如下两个问题:

(1) 一个界面中的所有组件只能采用一种布局方式,这样很难得到一个富于变化的界面。
(2) 有些布局方式只能管理有限个组件,例如JFrame窗体默认的BorderLayout布局管理器最多只能管理5个组件。

这两个问题通过使用JPanel面板就可以解决。首先将面板和组件添加到JFrame窗体中,然后再将子面板和组件添加到上级面板中,这样就可以向面板中添加数量不限的组件,并且通过对每个面板采用不同的布局管理器,真正解决众多组件的布局问题。JPanel面板默认采用FlowLavout布局管理器。

JScrollPane 面板

JScrollPane 类实现了一个带滚动条的面板,以下是它的常用方法:

1、getViewport():返回滚动窗格的视图端口,可以用来获取或设置视图组件

2、setViewportView(Component view):设置滚动窗格的视图组件

3、getVerticalScrollBar():返回垂直滚动条 getHorizontalScrollBar():返回水平滚动条

4、setVerticalScrollBarPolicy(int policy):设置垂直滚动条的显示策略,常用的策略(静态常量)有:

  • VERTICAL_SCROLLBAR_AS_NEEDED(20):当需要时显示垂直滚动条
  • VERTICAL_SCROLLBAR_NEVER(21):从不显示垂直滚动条
  • JScrollPane.VERTICAL_SCROLLBAR_ALWAYS(22):始终显示垂直滚动条

5、setHorizontalScrollBarPolicy(int policy):设置水平滚动条的显示策略,常用的策略(静态常量)有:

  • HORIZONTAL_SCROLLBAR_AS_NEEDED(30):当需要时显示水平滚动条
  • HORIZONTAL_SCROLLBAR_NEVER(31):从不显示水平滚动条
  • HORIZONTAL_SCROLLBAR_ALWAYS(32):始终显示水平滚动条

6、scrollToVisible(Rectangle r):滚动到指定的矩形区域可见

7、getPreferredSize():返回滚动窗格的首选大小,通常基于视图组件的大小和滚动条的状态

8、setRowHeaderView(Component rowHeaderView):设置行头视图组件,通常用于表格的行头

9、setColumnHeaderView(Component columnHeaderView):设置列头视图组件,通常用于表格的列头

10、getCorner(int corner):返回指定角的组件,例如滚动窗格的左上角、右下角等

11、setCorner(int corner, Component component):设置指定角的组件


结果展示

初始界面:

运算测试:只显示当前输入的量、中间结果和最后结果

①9+8=17

②3-8=-5

③3*4+9-5=16

④54/9+8*14-9*7=错误

缺陷:没有考虑优先计算。

完整代码如下
package com.calculator.example; // 自定义包名(组织和管理类) import javax.swing.*; // 导入Swing库,用于创建图形用户界面 import java.awt.*; // 导入AWT库,用于定义组件的布局和外观 import java.awt.event.ActionEvent; // 导入ActionEvent类,用于表示按钮点击事件 import java.awt.event.ActionListener; // 导入ActionListener接口,用于处理按钮点击事件 public class SimpleCalculator extends JFrame { // 创建SimpleCalculator类,继承自JFrame,表示一个窗口 private JTextField display; // 定义一个文本框,用于显示计算结果 private double result = 0; // 用于存储计算结果,初始值为0 private String operator = "="; // 用于存储当前的运算符,初始值为"=" private boolean start = true; // 用于标记是否开始新的计算,初始值为true public SimpleCalculator() { // 构造方法,用于初始化SimpleCalculator对象 // 创建显示结果的文本框 display = new JTextField("0"); // 初始化文本框,初始内容为"0" display.setEditable(false); // 设置文本框为不可编辑状态 display.setHorizontalAlignment(JTextField.RIGHT); // 设置文本框的内容右对齐 display.setFont(new Font("Arial", Font.PLAIN, 40)); // 设置文本框的字体为Arial,普通样式,大小为24 // 创建面板来放置按钮 JPanel panel = new JPanel(); // 创建一个JPanel对象,用于放置按钮 panel.setLayout(new GridLayout(4, 4)); // 设置面板的布局为4行4列的网格布局 // 添加按钮 addButton(panel, "7"); addButton(panel, "8"); addButton(panel, "9"); addButton(panel, "/"); addButton(panel, "4"); addButton(panel, "5"); addButton(panel, "6"); addButton(panel, "*"); addButton(panel, "1"); addButton(panel, "2"); addButton(panel, "3"); addButton(panel, "-"); addButton(panel, "0"); addButton(panel, "."); addButton(panel, "="); addButton(panel, "+"); // 设置窗口布局 setLayout(new BorderLayout()); // 设置窗口的布局为边界布局 add(display, BorderLayout.NORTH); // 将文本框添加到窗口的北部区域 add(panel, BorderLayout.CENTER); // 将面板添加到窗口的中心区域 // 设置窗口属性 setTitle("Simple Calculator"); // 设置窗口的标题为"Simple Calculator" setSize(400, 400); // 设置窗口的大小为400x400像素 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口的默认关闭操作为退出程序 setLocationRelativeTo(null); // 将窗口置于屏幕中央 setVisible(true); // 设置窗口为可见状态 } private void addButton(Container c, String label) { // 定义addButton方法,用于向容器中添加按钮 JButton button = new JButton(label); // 创建一个JButton对象,按钮的文本为label button.setPreferredSize(new Dimension(38, 35)); // 设置按钮的首选大小为80x80像素 button.setFont(new Font("Arial", Font.BOLD, 20)); // 设置按钮的字体为Arial,普通样式,大小为18 button.addActionListener(new ActionListener() { // 为按钮添加动作监听器 @Override public void actionPerformed(ActionEvent e) { // 定义动作事件的处理逻辑 String cmd = e.getActionCommand(); // 获取按钮的文本内容 if (cmd.charAt(0) >= '0' && cmd.charAt(0) <= '9' || cmd.equals(".")) { // 如果按钮文本是数字或小数点 if (start) { // 如果是新的计算开始 display.setText(cmd); // 将文本框的内容设置为按钮的文本 start = false; // 标记为非新的计算开始 } else { // 如果不是新的计算开始 display.setText(display.getText() + cmd); // 将按钮的文本追加到文本框的内容后面 } } else { // 如果按钮文本是运算符 if (start) { // 如果是新的计算开始 if (cmd.equals("-")) { // 如果按钮文本是"-" display.setText(cmd); // 将文本框的内容设置为"-" start = false; // 标记为非新的计算开始 } else { // 如果按钮文本不是"-" operator = cmd; // 更新当前的运算符 } } else { // 如果不是新的计算开始 calculate(Double.parseDouble(display.getText())); // 将文本框的内容转换为数字并调用calculate方法进行计算 operator = cmd; // 更新当前的运算符 start = true; // 标记为新的计算开始 } } } }); c.add(button); // 将按钮添加到容器中 } private void calculate(double x) { // 定义calculate方法,用于执行四则运算 switch (operator) { // 根据当前的运算符执行相应的运算 case "+": // 如果运算符是"+" result += x; // 将x加到result上 break; case "-": // 如果运算符是"-" result -= x; // 从result中减去x break; case "*": // 如果运算符是"*" result *= x; // 将result乘以x break; case "/": // 如果运算符是"/" result /= x; // 将result除以x break; case "=": // 如果运算符是"=" result = x; // 将result设置为x break; } display.setText("" + result); // 将计算结果显示在文本框中 } public static void main(String[] args) { // 主方法,程序的入口点 new SimpleCalculator(); // 创建一个SimpleCalculator对象,启动计算器程序 } }

这是小红书上一位上海的Java程序员失业想转行的分享贴。

Java开发的就业市场正在经历结构性调整,竞争日益激烈

传统纯业务开发岗位(如仅完成增删改查业务的后端工程师)的需求,特别是入门级岗位,正显著萎缩。随着企业技术需求升级,市场对Java人才的要求已从通用技能转向了更深入的领域经验(如云原生、微服务)或前沿的AI集成能力。这也导致岗位竞争加剧,在一、二线城市,求职者不仅面临技术内卷,还需应对学历与项目经验的高门槛。

大模型为核心的AI领域正展现出前所未有的就业热度与人才红利

2025年,AI相关新发岗位数量同比激增543%,单月增幅最高超过11倍,大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡,议价能力极强,跳槽薪资涨幅可达30%-50%。值得注意的是,市场并非单纯青睐算法研究员,而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师,在向“Java+大模型”复合人才转型时拥有独特优势,成为企业竞相争夺的对象,其薪资天花板也远高于传统Java岗位。

说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。

结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”

先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。

即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!

如何学习AGI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询