Java UI 是怎样演变的以及它的前景如何?

JAVA GUI(图形用户界面) Java提供了三个主要包做GUI开发:java.awt 包 – 主要提供字体/布局管理器javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)java.awt.event 包 – 事件处理,后台功能的实现。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Java UI 是怎样演变的以及它的前景如何?

Matt Chapman(mchapman@uk.ibm.com)
软件工程师,IBM Hursley
2001 年 7 月

自从 Java 语言出现的早期到现在,图形和用户界面功能已取得了飞跃式的发展。Java 2 平台包含一个复杂的跨平台的用户界面体系结构,它的组成包括众多的高级组件、一个先进的,功能丰富的,独立于设备的图形系统和许多的多媒体扩展。在本文中,我们将探究这个进步,详细审视当前 1.3 版本的功能,最后展望一下未来,看看发行版 1.4 会提供些什么。请点击文章顶部或底部的 讨论,在论坛与本文作者和其他读者分享您对本文的看法。

在 Java 2 平台发行之前,抽象窗口工具包(Abstract Window Toolkit,AWT)是 Java 平台的图形功能的范围。例如 Swing 等各种技术都是作为可选的扩展被引入的。在 Java 2 平台上,这些扩展中的大部分都可以在平台的核心中找到它们的一席之地,成为 Java 基础类(Java Foundation Classes,JFC)的一部分。JFC 指的是包含在 Java 2 平台内的一整套图形和用户界面技术,包括 AWT 和 Swing 等。在本文中,我们将讨论 JFC 的每个主要组件,并讨论一些可选的扩展。

JFC 的核心:Swing
Swing 是一个带有一套丰富组件的 GUI 工具包,它组成了 JFC 的用户界面功能的核心部分。它不仅是 AWT 所提供的组件的替代品,并且在这些组件的基础上有了很大进步。

当集成有优先权时
在 JDK 首次发行时,与本机平台的集成被认为具有优先权,于是 AWT 提供了一些组件,这些组件使用各平台的本机组件(在 Java 编程术语中,这些被称为重量级组件)来实现。例如,在 UNIX 平台上,java.awt.Button 类是用窗口小部件 Motif PushButton 实现的。

相同的 Java 应用程序在每个平台上都有不同的外观,但本意是不同的实现在功能上是等同的。当然,这也是问题开始的地方。在简单的界面里,这种等同是真的。但随着复杂性的增加,情况就不一样了,这只是因为组件的不同,而且在某些情况下,不管修正了多少错误,并且 AWT 的部件被重写了多少次,它们总会表现得有一点不同。

由于将优先权赋予集成而产生的另一个问题是功能性问题。AWT 只提供了有限的一套组件,是因为“最小公分母”方法 — 只有当一个特殊的组件或功能在每个平台上都可用的时候才能够被提供。一个典型的示例就是鼠标键。在以前的 JDK 1.0.2 中,是无法区分鼠标键的点击的,因为 Macintosh 只有一个鼠标键,所以其它的每个平台都要表现得好像自己也只支持一个鼠标键一样。

语言自身已经变得不只是一种平台了,GUI 也正在朝着在所有平台上都有相同的外观和行为这种方向转变。为了实现这个目标,本机组件必须尽量地丢弃。但是,显然一些本机代码还是必需的。如果不包含 X System Window 的调用,您就不能在 UNIX 上显示一个窗口。

现在来看一下 Swing,它使用 AWT 的一个子集来实现这个目标,这个子集包括基本画图操作和 java.awt 包中的某些类(包括 Container、Window、Panel、Dialog 和 Frame)。

所有可能的方法中最好的
Swing 没有完全遵循“Java 语言作为一个平台”的路线。相反,它通过提供一个可以返回本机平台的桥梁,把两种方法的精华部分结合起来了。

建立这个桥梁的机制被称为可插式 Look-and-Feel(它很接近主题的概念,在 linux 社区中非常流行)。每一个 Swing 组件都有一个自己的功能模型和一个独立的外观(look-and-feel),这可以预先设置或在运行时更改。

Swing 为 Windows 平台和 Motif 平台分别提供一个 Java look-and-feel(以前称为 Metal),同时为 Macintosh 平台提供一个 Java look-and-feel(作为额外选项)。平台的 look-and-feel 不像 AWT 一样使用平台的本机组件。相反,它们使用轻量级组件,有和本机组件一样的外观。这对于功能性来说是好的,但在外观上或行为上总有一些不同,所以复杂的界面永远不会和使用本机组件的界面完全相同。

另外,您可以制作自己的 look-and-feel。当您为高度专门化的应用程序制作一个 look-and-feel,或为一系列应用程序提供一个共同的 look-and-feel 时,这是一种强大的功能。

图 1、图 2 和图 3 展示了每一个主要的 look-and-feel 的屏幕。

图 1. Java look-and-feel
图 1. Java look-and-feel

图 2. Windows look-and-feel
图 2. Windows look-and-feel

图 3. Motif look-and-feel
图 3. Motif look-and-feel

要了解在发行版 1.4 中 Swing 有什么新特性,您可以跳到本文最后一部分,1.4 版本中对 UI 做的更改。

独立于平台的拖放
JDK 1.1 增加了一个通用机制,这种机制放在 java.awt.datatransfer 包中,实现了应用程序之间和应用程序内部的数据传输,以及对系统剪贴板的操作能力。

Java 2 版本引入了 java.awt.dnd 包。此包建立在数据传输的机制上,提供了拖放功能,这些功能可以在一个单独的 Java 应用程序内或两个 Java 应用程序之间以一种平台无关的方式执行。为了集成本机平台的拖放功能,它也可以以一种平台相关的方式运行。

使用拖放(Drag and Drop,DND)API 很具有挑战性,因为它要操作在很高的抽象度上来支持它工作的不同方式,同时也因为它被设计成操作被 java.awt.datatransfer.Transferable 接口所指定的任意数据类型。让我们看一个示例。

DND API 如何工作
首先,需要一个 DragSource 对象来初始化拖放操作。该对象被用于创建一个 DragGestureRecognizer,它规定标明拖动操作开始点的事件。例如,在一个特定组件上按下鼠标左键然后移动鼠标。

系统一识别到此动作,可利用 DragSource 对象通过要传输的信息来定义操作的开始点。

下一步,拖动操作的有效目的地可通过向 DropTarget 对象传送一个组件或者调用 Component 的新的 setDropTarget() 方法来定义。

实现 DropTargetListener 接口的类可用来响应拖放操作中可能出现的各种事件。主要事件是放操作,一个 DropTargetDropEvent 对象被传送给该操作。可向该对象查询被拖动的数据的类型。

侦听器可以拒绝或者接受拖动并传输数据,完成拖放操作。

方便残疾人士:辅助选项(Accessibility)
Java 应用程序配备有 JFC Accessibility API(JFC 辅助选项 API),所以可以被具有各种能力的用户访问,包括视力、听力或行动不便的用户。这些可能包括不能分辨视觉或听觉信号或者不能操作定位设备。

辅助选项支持的两大重要功能就是屏幕读取器和屏幕放大镜。屏幕读取器允许用户通过创建界面的 off-screen 表示,并将其传送到一个语音合成器或盲文终端来与 GUI 进行交互。屏幕放大镜提供一个屏幕的放大窗口,典型情况下是正常大小的 2 到 16 倍。它们通常不断跟踪指针的移动和输入焦点的改变,然后相应地调整放大的窗口。另外,象平滑字体这样的技术可能会用于生成更清晰的图像。

Java Accessibility Bridge(Java 辅助选项 Bridge)
一些主机系统,如 Microsoft Windows,提供它们自己的辅助选项功能。缺省情况下,Java 应用程序并不完全支持它们。例如,对于本机应用程序,屏幕放大器探测输入焦点何时转换到另一个不同的用户界面组件(例如通过使用 Tab 键),然后调整放大的屏幕部分,来显示当前拥有输入焦点的组件。

然而,Swing 应用程序使用的是轻量级的组件,操作系统将这些组件作为图像处理,而不作为离散的组件来处理。这就意味着屏幕放大器不能象本机应用程序那样在输入焦点中跟踪发生的改变。

这正好就是面向 Windows 的 Java Accessibility Bridge 所要解决的问题。它在与轻量级组件有关的事件和本机系统事件之间建立一个映射。使用这个 Bridge,支持 Accessibility API 的 Java 应用程序就可以与 Windows 辅助选项支持完全集成。

本文结束处的参考资料提供了更多与辅助选项有关的参考资料的链接。

从简单到先进:Java 2D
在 Java 2 平台之前,语言中的图形功能相当简单,仅限于单像素厚度的实线;少数几个几何图形(如椭圆、弧和多边形);和基本的画图功能。随着 Java 2D API(它包含一个真正的功能集)的出现,所有的一切都改变了。

这个 API 的核心是由 java.awt.Graphics2D 类提供的,该类是 java.awt.Graphics 的一个子类。API 的其它部分由 java.awt 层次结构中的其它包提供,包括 java.awt.color、java.awt.font 和 java.awt.geom。

java.awt.Graphics2D 类
这个类是 java.awt.Graphics(该类在 Java 2 发行前就提供图形功能)的一个子类。这样安排的原因是:向后兼容。组件的着色还是通过调用它们的 paint() 方法,它使用一个 Graphics 对象。

尽管在语言的当前版本中,这个对象真是一个 Graphics2D 对象。这意味着,paint() 方法可以将 Graphics 对象作为一个 Graphics 对象使用(使用旧的画图方法),或者将其强制转换成 Graphics2D 对象。如果使用第二种选择,就可以使用 2D API 的所有附加功能。

java.awt.geom 包
java.awt.geom 包提供一些有关二维几何的类,如 Arc2D、Line2D、Rectangle2D、Ellipse2D 和 CubicCurve2D。其中每一个都是抽象类,他们都是两个名为 Double 和 Float 的非抽象内部类(它们是抽象外部类的子类)。

这些类允许各种几何图形建立在双精度或浮点精度的坐标系上。例如,newEllipse2D.Float(x,y,w,h) 将在 (x,y) 点上构造一个以宽为 w、高为 h 的矩形为边界的椭圆,其中 x、y、w 和 h 都为浮点值。

在这个包里还有 AffineTransform 类,它是组成 2D API 的核心元素。仿射转换指的是平行线在转换后还保持平行。这种类型的转换示例包括如下的操作:平移、旋转、缩放、剪切或者这些操作的组合。每一个转换都可以用一个 3x3 的矩阵来表示,该矩阵规定转换的源点和目标点之间的映射。

AffineTransform 类的实例可以直接从一个浮点值的矩阵中创建,尽管通常情况下是通过规定一个或多个平移、旋转、缩放或剪切操作来创建。多数情况下是使用双精度值,并且角度是用弧度来度量的(而不是 Arc2D 类中使用的度)。

文本着色
Java 2D API 的文本功能也相当强大。它们包括:

  • 使用抗锯齿处理和微调(hinting)以达到更好的输出质量

  • 可以使用系统安装的所有字体

  • 可以将对图形对象的操作(旋转、缩放、着色、剪切等等)应用到文本上。

  • 支持向字符串添加内嵌属性(如字体、尺寸、深浅,甚至图像)

  • 支持双向文本(启用从右到左的字符顺序,就象您在阿拉伯语和希伯来语中可能遇到的一样)

  • 第一光标和第二光标能够浏览同时包含从右到左和从左到右字符顺序的文本。

  • 先进的字体度量功能,超过旧的 java.awt.FontMetrics 类中的相应功能

  • 排版功能可以实现单词换行和调整多行文本

Java 2D 工作的一个示例
清单 1 包含一个使用部分 Java 2D 方法的基本示例的代码,加上几个其它的方法。这是一个完整的程序,但只是接触了 2D API 所提供的功能的皮毛。(输出请参见图 4)。

清单 1. 一个简单的 Java 2D 示例



import java.awt.*;

import java.awt.geom.*;



public class j2d extends Frame {

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

    public j2d() {

        setSize(220,180);

        setVisible(true);

    }

    public void paint(Graphics g) {

        // Obtain a Graphics2D object

        Graphics2D g2 = (Graphics2D)g;



        // Set the rendering quality.

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

            RenderingHints.VALUE_ANTIALIAS_ON);



        // define a linear colour gradient

        GradientPaint gp = new GradientPaint(0, 60, Color.red,

                                             0, 120, Color.yellow);

        Ellipse2D r = new Ellipse2D.Float(30, 60, 160, 60);

        g2.setPaint(gp);

        g2.fill(r);



        // set rotation

        g2.transform(AffineTransform.getRotateInstance(Math.PI/8));

        g2.setFont(new Font("Serif", Font.BOLD, 85));

        g2.setPaint(Color.blue);

        // set compositing rule with transparency

        g2.setComposite(AlphaComposite.getInstance(

                                       AlphaComposite.SRC_OVER, 0.5f));

        g2.drawString("J2D",50,70);

    }

}



图 4. 清单 1 的输出
清单 1 的输出

要了解更多关于 Java 2D API 的参考资料,请参阅参考资料。

声音终于迎头赶上:Audio API(音频 API)
Java 语言每发行一个主要版本,都会给音频功能带来稳步的提高。JDK 的 1.1 发行版以前(包括 1.1 发行版)的版本中,可以在 java.applet 包中找到对 8 位单声道声音的基本支持。一个 AU 格式的音频剪辑可以用 URL 来载入,并且只有三个操作可以使用:播放、停止和循环。1.2 发行版中改进了这种情况。

从 8 位到 16 位
Java 2 第一个发行版(版本 1.2)集成了一个经 Beatnik 公司许可的新的声音引擎,提供对各种常用格式的 16 位立体声的支持,包括 AU、WAV、AIFF 和多种 MIDI 格式。

这个版本中还附加了新的静态方法 java.applet.Applet.newAudioClip(),它使得在应用程序中使用声音更加容易,而不仅仅在 applet 中。然后,1.3 版本取得了巨大的进步。

Java Sound API(Java 声音 API)
平台的 1.3 版本取得了目前为止最大的进步。这个版本使用相同的 Beatnik 声音引擎及以前所有的功能,并增加了一个全新的 API — Java Sound API。

Java Sound API 提供了一套扩展的音频功能,并可通过新的 javax.media.sound.sampled 和 javax.media.sound.midi 包来访问。

javax.media.sound.sampled 包包含从各种声源回放声音的类,和最多能混合 64 声道 的类。每一个音频信号可以通过不同的方法进行控制和处理,比如在不同文件格式之间的转换,和对效果(如增益和回响)的使用。同时还支持输入源(例如麦克风)的音频捕捉。

javax.media.sound.midi 包提供 MIDI 功能,包括载入音色库和从 MIDI 数据中生成声音,以及回放 MIDI 序列。

遗漏了什么?硬件加速
Java 音频功能还缺乏一个重要的方面 — 硬件加速。缺乏这种支持意味着不管您的声卡硬件性能多么优秀,这些功能都无法被使用。这样的结构确实带来了好的跨平台可移植性,但付出的代价是高 CPU 开销和较低的性能。

标准演示包中的 JavaSound 演示展示了 Java Sound API 的许多功能。要了解更多相关信息,请参阅参考资料。

自动化事件:AWT 机器人
1.3 版本中新加入的 java.awt.Robot 类被设计成在本机平台上生成输入事件。提供的操作包括:

  • 移动鼠标指针到屏幕上给定的位置
  • 生成鼠标键按下和释放事件
  • 生成键盘按下和释放事件

这种功能为测试自动化带来了全新的可能性。例如,一系列事件可以被一次性记录,然后以全自动的方式自动回放任意遍。其它的功能还提供了测试一个屏幕坐标的像素颜色的方法,甚至可以将屏幕上的一整块区域作为一个图像缓冲捕捉下来。

要了解 AWT 在 1.4 版中有什么新特性,您可以跳到本文的最后部分,1.4 版本中对 UI 做的更改。

多媒体选项:Java Media API(Java 媒体 API)
Java Media API 是一套涵盖广泛的多媒体技术领域的资源。其中,如 2D API 和 声音 API 是核心 J2SE 平台的一部分;其余的是目前可选的扩展,不过其中的一些技术在将来无疑会进入核心。这个领域的其它 API 还有 Java 3D、Advanced Imaging(高级图像处理)、Image I/O(图像 I/O)、Java Media Framework(JMF,Java 媒体框架)和 Speech(语音)。

Java 3D
Java 3D API 提供了一套面向对象的接口,支持一种简单的、高级的编程模型,让开发人员可以构建、着色和控制 3D 对象的行为和可视环境。

这个 API 包括一个详细的规范文档和 javax.media.j3d、javax.vecmath 包的实现。

Advanced Imaging
这个规范所涵盖的操作将提高用户处理图像的能力。它包括的操作有对比度增强、剪切、缩放、几何弯曲和频率范围处理。

这种类型的功能可应用于各种领域,如天文学、医学图像处理、科学目视表示、气象学和摄影。

Image I/O
这种 API 定义了一种可读/写不同格式图像的可插式框架。这种新的 API 正在由 Java Community Process 设计。

Java Media Framework(JMF)
JMF 是一种 API,可以将音频、视频和其它基于时间的媒体整合到 Java 应用程序和 applet 中。这个可选的包扩展了 J2SE 平台的多媒体功能。

Speech
Java Speech API 允许开发人员将语音技术整合到 Java applet 和应用程序的用户界面中。这种 API 规定一个跨平台的接口来支持 命令—控制识别器、听写系统和语音合成器。

这个综合 API 被分成几个规范:

  • Java Speech API 规范(Java Speech API Specification,JSAPI)
  • Java Speech API 程序员指南
  • Java Speech API 语法格式规范(Java Speech API Grammar Format Specification,JSGF)
  • Java Speech API 标记语言规范(Java Speech API Markup Language Specification,JSML)

这个 API 没有 Sun 公司的参考实现,但是有许多第三方实现,包括 Speech for Java(可以从 IBM alphaWorks 获得),它使用 ViaVoice 来支持语音命令识别、听写和文本到语音的合成。

清单 2. 举例说明了 Java Speech API 中的语音合成。它还使用 JSML 来控制合成器朗读文本的方式(定义音高、速度、重音等等)。

清单 2. 合成和 JSML



import javax.speech.synthesis.*;



public class TrySpeech {

    public static void main(String args[]) {

        Synthesizer synthesizer = Central.createSynthesizer(null);

        synthesizer.allocate();

        try {

            synthesizer.speak("Hello I am a computer", null);

            synthesizer.speak(

                "Hello I am a 
      
       computer
      ", null);

            synthesizer.speak(

                "Hello I am a 
      
       computer
      ",

                null);

        } catch (Exception e) { e.printStackTrace(); }

    }

}



要了解 Speech API 另外的信息,请参阅参考资料。

1.4 版本中对 UI 做的更改
即将发行的发行版,版本 1.4(代号为 Merlin)将展示许多新功能,同时还对许多错误进行了必需的修正。我们将重点阐述其中的一些变化。

Swing 有什么新特性
Merlin 发行版将给 Swing 工具包带来广泛的提高。新功能包括:

  • 一个用于不确定时间的进度条,它将向用户说明操作,而不用确定完成的程度。在您预先不知道某些事会用掉多少时间时,这些组件将会很有用(例如建立网络连接)。

  • JSpinner 组件,它让用户使用箭头按钮在列表中滚动,从一个有序的列表中进行选择。

  • JFormattedTextField 组件,它让开发人员限制文本组件中允许的字符集。这个功能在输入日期和数字时非常有用。

  • 增强了新的 JTabbedPane 以允许可滚动的制表页。目前当制表页不适合全部放在一行时,它们就会溢出到多个行中去,这对于用户来说是非常糟糕的,因为在选择另一行的制表页时窗格就必须重新排列制表页。这里采用的另一种办法时将所有的制表页保持在一行,但是提供箭头按钮来实现沿着行的滚动。

  • Windows look-and-feel 的增强使其能够更紧密地匹配本机平台。这些增强包括为匹配 Windows 2000 而对外观所做的改变,比如标题栏的渐近填充,以及与 Windows 桌面更好的集成以响应用户对桌面设置的更改。

  • 大量的错误被修正,还有一些较小的增强,包括为 Swing 事件附加声音的功能。

AWT 得到一个新的焦点模型
在发行版 1.4 中 AWT 被赋予一种全新的焦点模型,很久以来这一直是个问题区域。现有的焦点模型非常令人头痛,因为它存在无数的错误,并且功能很少,比如不能查询当前哪个组件拥有焦点。产生问题的原因通常是:不同的平台处理输入焦点的方式不同,以及新的轻量级组件要求单独处理焦点所带来的复杂性。

新模型已经尽可能使用共享代码实现;平台相关的代码被最小化。新模型的核心是 java.awt.KeyboardFocusManager 类。这个类将提供公共 API 调用来查询和设置焦点状态的许多方面,比如当前哪个组件享有焦点,还有焦点遍历循环中组件的顺序。

最后一点:新的焦点模型与当前各个版本不是完全向后兼容的,所以现有的应用程序将需要彻底的测试。

其它 AWT 功能
用一个滚动轮作为鼠标中键的鼠标非常流行,所以增加了对它的支持。它采用的形式为,一个 新的 MouseWheelEvent 类、一个 MouseWheelListener 接口和一个新的 java.awt.Component 类的 addMouseWheelListener() 方法(和对应的 removeMouseWheelListener() 方法)。

增加了对 Headless Java. 的支持。这个增加意味着,在服务器上运行的 Java 应用程序在没有 GUI 环境的情况下也仍然能够使用 AWT,例如,在内存中创建图像以便通过网络发出。

最后,其它的更改包括对拖放功能的增强、创建无修饰框架的能力,以及众多错误的修正。

参考资料

Perl语言的图形用户界面 Perl是一种高级编程语言,最初由拉里·沃尔(Larry Wall)于1987年发布。它因其强大的正则表达式处理能力和灵活的语法而广泛应用于文本文件处理、网络编程、系统管理等领域。随着时间的推移,Perl逐渐演变为一种多范式的语言,支持面向对象编程(OOP)、函数式编程和命令式编程等多种风格。 阅读详情

相关推荐

LwIP在国产MCU的落地实践:从协议栈优化到网络稳定性实战

本文详细介绍了LwIP协议栈在国产GD32F407 MCU上的移植与优化实践,涵盖硬件平台选择、驱动适配、协议栈调优和网络稳定性提升策略。通过内存管理优化、实时操作系统集成和性能测试,为工业物联网应用提供高可靠性网络通信解决方案,显著提升数据传输效率和系统稳定性。

m2n3b4v5c6的博客 270

Java UI组件和多媒体

Java UI组件和多媒体

TaoqiBao_的博客 1612

【图文步骤】EC-Engineer部分操作详细步骤

EC-Engineer部分功能详细使用手册

weixin_42212468的博客 6174

第十篇:Java图形用户界面(GUI)

Swing是Java中一个用于构建图形用户界面的图形用户界面(GUI)工具包。它是Java的包的一部分,提供了大量的可重用组件,用于创建跨平台的图形界面。Swing库是Java中用于构建图形用户界面的重要工具,它提供了丰富的组件和布局管理器,使得创建用户友好的应用界面变得更为简单和灵活。事件处理机制则使得应用程序能够响应用户的操作,增强了用户的交互体验。Swing库概述:了解Swing库的历史和常用组件,如JFrameJButtonJTextField,是构建Java GUI应用的基础。布局管理。

HYP_Coder的博客 1927

香橙派5Max + Realsense D435i + Fast-Drone-250:手把手教你搭建一个完整的无人机视觉开发环境

本文详细介绍了如何利用香橙派5Max、Realsense D435i深度相机和Fast-Drone-250项目搭建完整的无人机视觉开发环境。从硬件连接到ROS配置,再到项目部署与性能优化,提供全栈式实战指南,助力开发者快速实现SLAM算法验证和自主导航功能开发。

weixin_30879169的博客 464

18年陕西省TI杯电赛无人机赛题视觉部分

更新: 相同任务另外两种不同的视觉方法: https://blog.youkuaiyun.com/qq_41895747/article/details/97613077 https://blog.youkuaiyun.com/qq_41895747/article/details/97614971 任务:识别前方的方框,无人机从方框中飞出去 视觉任务:识别特定方框,返回方框中心坐标 # -*- codin...

沉迷单车的追风少年 1506

HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)

当Java UI框架提供的组件无法满足设计需求时,可以创建自定义组件,根据设计需求添加绘制任务,并定义组件的属性及事件响应,完成组件的自定义。下面以自定义圆环组件为例,介绍自定义组件的通用配置方法:在屏幕中绘制圆环,并实现点击改变圆环颜色的功能。在界面中显示的自定义圆环组件1. 创建自定义组件的类,并继承Component或其子类,添加构造方法。示例代码如下//如需支持xml创建自定义组件,必须添加该构造方法。

爱吃土豆丝的打工人的博客 2994

小白也能懂!一步步教你用FPGA加速YOLO目标检测(入门篇)

安装到 PYNQ 开发板中。该库为 PYNQ 平台提供了对量化神经网络(如 YOLO)的硬件加速支持。确保你的电脑已连接到外网,如 WiFi 或热点(手机热点理论上也可用,未实测)。当你看到安装成功的提示后,打开 Jupyter Notebook,你会发现在。趁这个机会,泡了杯茶,刷了会儿手机,顺便感慨了一下开源社区的强大……页面中多出了一些新的项目文件夹 —— 这就是我们刚才安装的。参数,浅拷贝只克隆最近一次提交,减少数据量,避免超时问题。初始化,打开该文件,即可运行我们的Tiny YOLO。

FJN110的博客 1598

Java的UI

继承JFramesetVisible一般放在最后一行,这样前面的操作完后才能显示面板:在窗口上展示的部分。

qq_45576281的博客 658

【报错解决】OpenClaw 报错 EACCES: permission denied:安装权限不足

本文针对国产操作系统环境下使用 npm 安装 OpenClaw 时出现的 EACCES 权限错误,提供了专业解决方案。文章首先分析了问题本质是 npm 全局安装路径与 Linux 权限模型的冲突,然后给出三种解决方案:1)配置用户级 npm 全局目录(推荐);2)使用 nvm 管理 Node.js;3)临时使用 sudo(不推荐)。特别强调在企业环境中应避免使用 root 权限安装,并详细说明了如何正确设置用户级 npm 路径,确保符合生产环境的安全审计要求。该方案同样适用于 OpenEuler、OpenC

博客 3192

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

随着新零售概念的兴起,无人零售柜、智能零售店等新型零售模式快速发展。传统零售柜依赖于人工盘点和补货,效率低下且成本高昂。本文提出了一种基于YOLO系列目标检测算法的零售柜商品检测系统,实现了对零售柜内商品的自动识别、计数和库存管理。系统采用PySide6开发用户界面,集成了YOLOv5、YOLOv6、YOLOv7和YOLOv8等多种先进的深度学习模型,提供了完整的训练和推理流程。本文将详细介绍系统设计、算法实现、数据集构建和实际应用效果,并提供完整的代码实现。

YOLO 333

Java的发展史与前景

Java是一种广泛使用的编程语言,其设计理念、功能以及应用场景经历了多次演变。本文将对Java的发展历程进行梳理,并探讨其未来的发展前景。

小蜗牛的珍贵百宝箱 1316

openssl命令数据摘要详解(SM3、sha256、MD5、dss1、mdc2、ripemd160)

SM3是由中国密码学家设计的密码哈希函数,是中国国家密码管理局(National Cryptographic Authority,简称:CNCA)颁布的国家密码算法标准。SM3属于密码杂凑函数家族,它可以计算任意长度的消息并生成固定长度(256比特,即32字节)的哈希值。SM3生成的哈希值长度为256比特(32字节),不管输入消息的长度如何,输出始终是固定的。SM3将输入数据划分为512比特(64字节)的分组,并对每个分组进行处理。

N阶二进制的博客 4461

Java:从诞生到未来的编程语言进化史与应用前景

Java是一种广泛使用的高级编程语言,自1995年首次发布以来,已经经历了二十多年的发展,成为企业级应用开发的首选语言之一。本文将全面回顾Java的发展历程,探讨其核心技术特点,分析其在各个领域的应用,并展望其未来的发展方向。

2301_77163982的博客 1612

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

什么是JAVA?JAVA发展前景如何?

我从Java的官网看到下面这段话: 97% 的企业桌面运行 Java 美国有 89% 的桌面(或计算机)运行 Java 全球有 900 万 Java 开发人员 开发人员的头号选择 排名第一的部署平台 有 30 亿部移动电话运行 Java 100% 的蓝光盘播放器附带了 Java 有 50 亿张 Java 卡在使用 1.25 亿台 TV 设备运行 Java 前 5 个原始设备制造商均提供了 Java ME Java 是几乎所有类型的网络应用程序的基础,也是开发和提供嵌入式和移动应用程序、游戏、基于 Web 的

Hazard_的博客 345

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java是什么_什么是JAVA?JAVA发展前景如何?

我从Java的官网看到下面这段话: 97% 的企业桌面运行 Java 美国有 89% 的桌面(或计算机)运行 Java 全球有 900 万 Java 开发人员 开发人员的头号选择 排名第一的部署平台 有 30 亿部移动电话运行 Java 100% 的蓝光盘播放器附带了 Java 有 50 亿张 Java 卡在使用 1.25 亿台 TV 设备运行 Java 前 5 个原始设备制造商均提供了 Ja...

weixin_39781594的博客 297

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Web前端发展前景,以及技术揭秘

随着互联网时代的发展, Web前端开发已经成为时下较火的技术之一,针对Web前端开发工程师这一新兴职业,虽然受重视的时间还比较短,但是随着时间的发展,Web前端开发技术一直在不断的创新与...

weixin_45967384的博客 452

什么是Web前端开发?发展前景怎么样

  什么是web前端开发?前端开发一般指网页开发,前端开发是从网页制作上演变过来的,网页上软件化的交互形式都是基于前段技术实现的。程序员指从事程序开发、维护的专业人员,其中程序员可以分为设计和编码两个部分。   前端+HTML5的发展前景可观,可以从事的工作也很多,比如:web前端开发工程师、html5开发工程师、web APP开发工程师、Java开发工程师等。   在早期点Web前端不...

QF_Python的博客 2032

带你揭秘Web前端发展的前景以及技术

随着互联网时代的发展, Web前端开发已经成为时下较火的技术之一,针对Web前端开发工程师这一新兴职业,虽然受重视的时间还比较短,但是随着时间的发展,Web前端开发技术一直在不断的创新与完善。 1、Web开发分类与区别 人们通常将Web分为前端和后端,前端相关的职位有前端设计师(UI/UE),前端开发工程师,后端相关的有后端开发工程师。 2、技术栈区别 看各大招聘网站上,公司对前端开发工程师的要求莫过于精通HTML,CSS,JS,有良好的交互设计能力等。再看公司对后端开发工程师的要求: 比如Java开发

HBohan的博客 631

web前端开发技术现状与发展_Web前端发展前景,以及技术揭秘

随着互联网时代的发展, Web前端开发已经成为时下较火的技术之一,针对Web前端开发工程师这一新兴职业,虽然受重视的时间还比较短,但是随着时间的发展,Web前端开发技术一直在不断的创新与完善,那么小白该如何理解Web开发呢?下面和千锋广州小编一起来看看吧!1、Web开发分类与区别人们通常将Web分为前端和后端,前端相关的职位有前端设计师(UI/UE),前端开发工程师,后端相关的有后端开发工程师。2...

weixin_39601642的博客 3605

Web前端发展前景&技术揭秘

Web前端发展前景&技术揭秘 随着互联网时代的发展, Web前端开发已经成为时下较火的技术之一,针对Web前端开发工程师这一新兴职业,虽然受重视的时间还比较短,但是随着时间的发展,Web前端开发技术一直在不断的创新与完善。 1、Web开发分类与区别 人们通常将Web分为前端和后端,前端相关的职位有前端设计师(UI/UE),前端开发工程师,后端相关的有后端开发工程师。 2、技术栈区别 看各大招聘网站上,公司对前端开发工程师的要求莫过于精通HTML,CSS,JS,有良好的交互设计能力等。再看公司对后端开

hell0_W0rld4396的博客 316

Hello Java

Java起源 20 世纪 90 年代,功能强大且廉价的单片式计算机系统诞生。 SUN 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导, 名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。 而用当时有优势的C++语言存在很多问题(过于复杂、不适合跨平台运行等),项目小组最后决定,要去除C++的一些特性(指针等),并加入一些新特性,最终在 1992 年,他们开发了一种名 为“Oak”的面向对象语言。 但是当时开发商并没有将其投

m0_46334360的博客 201

小白该如何理解Web开发?未来前景如何?

随着互联网时代的发展, Web前端开发已经成为时下较火的技术之一,针对Web前端开发工程师这一新兴职业,虽然受重视的时间还比较短,但是随着时间的发展,Web前端开发技术一直在不断的创新与完善,那么小白该如何理解Web开发呢?下面和千锋广州小编一起来看看吧! 1、Web开发分类与区别 人们通常将Web分为前端和后端,前端相关的职位有前端设计师(UI/UE),前端开发工程师,后端相关的有后端开发工程师...

weixin_43703144的博客 167

Java小结|Java入门知识点

Java入门知识点 Java的起源与演变 Java的起源 20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且 功能强大,使用它可以大幅度提升消费性电子产品的智能化程度。 SUN 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林 (James Gosling)领导,名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。 那么使用何种编程语言来设计,是项目小组头疼的事。当时 C++较为有优势的,项目小 组首先考虑的是采用它来编写程序,

qq_36584575的博客 384

大白话告诉你什么是java

  什么是Java?   从Java的官网上抄下来下面这段话:  97% 的企业桌面运行 Java  美国有 89% 的桌面(或计算机)运行 Java  全球有 900 万 Java 开发人员  开发人员的头号选择  排名第一的部署平台  有 30 亿部移动电话运行 Java  100% 的蓝光盘播放器附带了 Java  有 50 亿张 Java 卡在使用  1.25 ...

174
上一篇: 滴滴香浓,意犹未尽—畅游Java世界(2)
下一篇: ARM和Sun酝酿新的Java芯片
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值