Vaadin教程

1.简介

当您是后端开发人员时,您会听到人们说您无法创建内置HTML的UI页面并且无法使用CSS设置样式时所引起的痛苦。 就像成为后端开发人员一样,它具有已知的局限性,即我们可以播放和运行大型生产后端应用程序,但不能创建漂亮的页面来实际显示这些后端应用程序管理的数据。 如果您曾经遇到过同样的想法,请不用担心, Vaadin在这里。

使用Vaadin,可以完全使用Java创建应用程序的前端 。 它提供了高度成熟的服务器端UI创建支持,使我们能够用Java语言编写生产级可重用组件。 它具有所有流行的Java开发环境(Eclipse,IntelliJ,NetBeans,Maven等;本教程的示例使用IntelliJ)的支持。 我们将首先了解Vaadin的实际工作原理,并遵循Vaadin中存在的各种组件和布局。 我们将以出色的示例应用程序结束本课程,该示例应用程序在单个视图中演示事件处理和多种布局。 让我们开始吧。

目录

1.简介 2. Vaadin如何工作? 3. Vaadin插件 4.创建一个项目 5. Maven依赖 6. Vaadin Servlet 7. Vaadin主班 8. Vaadin布局管理器
8.1 VerticalLayout 8.2 Horizo​​ntalLayout 8.3网格布局 8.4 FormLayout
9. Vaadin成分
9.1标签 9.2链接 9.3文字栏位 9.4 TextArea 9.5 DateField和InlineDateField 9.6 PasswordField 9.7按钮 9.8复选框 9.9清单
10.使用Vaadin主题 11.结论 12.下载源代码

2. Vaadin如何工作?

一般来说,Vaadin与AWT,Spring和SWT十分相似。 我们有一些布局和组件,可以实例化并提供数据,最后将它们绑定到父布局中以显示容器。 这些组件和布局的实际呈现方式不同。 Vaadin组件不是使用布局依赖于底层操作系统的Java呈现的传统组件,而是通过Ajax与后端服务器通信并由框架自动管理HTML5 / CSS / JavaScript组件。 让我们可视化Vaadin如何在前端UI引擎及其自身组件之间进行排列:

Vaadin建筑

在上图中,非常清楚的是Vaadin如何防止后端开发人员编写基于HTML,CSS和JS的组件,并提供Vaadin引擎,我们可以在该引擎上针对UI组件进行Java代码本身的开发,然后可以通过框架将其翻译为HTML组件。本身。

它是客户端Vaadin引擎(以HTML5 / CSS / JavaScript编写,基于Google Web Toolkit)和服务器端框架,它们为我们管理UI。 服务器端组件还支持Vaadin中的数据绑定,这使得将数据库集成到组件中非常容易。 最后,不要认为Vaadin仅限于Java。 使用最新版本的Vaadin,还可以编写基于HTML的Vaadin布局,使用CSS设置样式,并使用Javascript本身来调整行为。 在本课程中,我们将仅限于仅使用Java语言。

3. Vaadin插件

既然我们了解了Vaadin的工作原理,就可以为我们的机器进行设置了。 要继续学习本课程以及IDE内提供的易于使用的插件,我们可以将Eclipse插件安装为:

Vaadin Eclipse插件

Vaadin Eclipse插件

如果您像我一样使用IntelliJ,我们也可以获取IDE的插件:

Vaadin IntelliJ插件

Vaadin IntelliJ插件

该插件不是绝对需要的,但它为使用100%基于UI的系统提供了机会,您可以在其中使用所见即所得的系统。

4.创建一个项目

现在我们已经准备就绪,终于可以使用Maven为我们创建一个项目。 我们将使用Vaadin原型创建一个应用程序。 让我们看一下这里的命令:

创建一个项目

mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-application -DarchetypeVersion=LATEST -DgroupId=com.javacodegeeks.example -DartifactId=JCG-Vaadin-Example -Dversion=1.0 -Dpackaging=jar

这是我们创建项目时得到的结果(我们仅显示有趣的部分):

建立专案

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] Archetype repository not defined. Using the one from [com.vaadin:vaadin-archetype-application:8.4.1] found in catalog remote....some non-interesting parts....[INFO] Using property: groupId = com.javacodegeeks.example
[INFO] Using property: artifactId = JCG-Vaadin-Example
[INFO] Using property: version = 1.0
[INFO] Using property: package = com.javacodegeeks.example
[INFO] Using property: themeName = mytheme
[INFO] Using property: uiName = MyUI
Confirm properties configuration:
groupId: com.javacodegeeks.example
artifactId: JCG-Vaadin-Example
version: 1.0
package: com.javacodegeeks.example
themeName: mytheme
uiName: MyUIY: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: vaadin-archetype-application:LATEST
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.javacodegeeks.example
[INFO] Parameter: artifactId, Value: JCG-Vaadin-Example
[INFO] Parameter: version, Value: 1.0
[INFO] Parameter: package, Value: com.javacodegeeks.example
[INFO] Parameter: packageInPathFormat, Value: com/javacodegeeks/example
[INFO] Parameter: package, Value: com.javacodegeeks.example
[INFO] Parameter: version, Value: 1.0
[INFO] Parameter: groupId, Value: com.javacodegeeks.example
[INFO] Parameter: themeName, Value: mytheme
[INFO] Parameter: uiName, Value: MyUI
[INFO] Parameter: artifactId, Value: JCG-Vaadin-Example
[INFO] Project created from Archetype in dir: /Users/shubham/JCG-Vaadin-Example
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 32.100 s
[INFO] Finished at: 2018-05-13T18:43:43+05:30
[INFO] ------------------------------------------------------------------------

Vaadin原型负责在项目中添加适当的依赖项以及构建项目所需的所有其他信息。 在下一节中,我们将了解项目的pom.xml文件中的所有部分。

5. Maven依赖

我们使用Vaadin原型创建的项目负责在项目中添加适当的依赖项。 让我们pom.xml项目的pom.xml文件。 让我们先来看一下添加到文件中的依赖项:

pom.xml

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-server</artifactId></dependency><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-push</artifactId></dependency><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-client-compiled</artifactId></dependency><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-themes</artifactId></dependency>
</dependencies>

以下依赖项已添加到项目中:

  • javax.servlet-api :此依赖关系提供了将Servlet保留在我们的项目中以进行网络调用的能力
  • vaadin-server :此依赖性包括用于管理服务器详细信息(如会话,客户端通信等)的软件包。
  • vaadin-push :这种依赖关系对于本课不是必需的,但仍然很重要。 当我们需要基于服务器上执行的线程来更新UI时,可以将请求从服务器发送到UI,这样UI可以立即更新,并且UI不必发出网络请求即可获取UI上的数据状态。服务器。 为此,使用推包。
  • vaadin-client-compiled :此依赖项基于GWT,并包含用于编译客户端组件的软件包。
  • vaadin-themes :此依赖项包括一些内置主题和用于创建自定义主题的所有实用程序。

接下来,我们还需要添加Vaadin存储库和依赖项管理。 dependencyManagement标签有助于管理所有Vaadin依赖项的版本:

pom.xml

<repositories><repository><id>vaadin-addons</id><url>http://maven.vaadin.com/vaadin-addons</url></repository>
</repositories><dependencyManagement><dependencies><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-bom</artifactId><version>${vaadin.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

最后,我们需要有Jetty插件,该插件可以让我们通过在命令行上运行jetty:run来轻松测试开发版本。

pom.xml

<plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>${jetty.plugin.version}</version><configuration><scanIntervalSeconds>2</scanIntervalSeconds></configuration>
</plugin>

这使我们可以直接从命令行运行Vaadin应用程序,并为我们提供嵌入式Jetty服务器。

6. Vaadin Servlet

在Vaadin中,我们没有web.xml文件来配置应用程序的调度程序servlet。 相反,我们有Vaadin Servlet,它通过一些注释定义了应用程序的入口点:

MyUI.java

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet { }

在上面的servlet应用程序中, ui字段明确提到MyUI.class是指定应用程序的主要入口点。

7. Vaadin主班

当我们使用Vaadin原型定义应用程序时,该应用程序随附一个已经在应用程序主类中设置的基本UI,如上一节所示,该UI还包含Vaadin Servlet的定义。 这是我们的应用程序中预定义的主要入口点UI类:

MyUI.java

package com.javacodegeeks.example;import javax.servlet.annotation.WebServlet;import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;@Theme("mytheme")
public class MyUI extends UI {private static final long serialVersionUID = 7132834690301152714L;@Overrideprotected void init(VaadinRequest vaadinRequest) {final VerticalLayout layout = new VerticalLayout();final TextField name = new TextField();name.setCaption("Type your name here:");Button button = new Button("Click Me");button.addClickListener(e -> {layout.addComponent(new Label("Thanks " + name.getValue() + ", it works!"));});layout.addComponents(name, button);setContent(layout);}@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)public static class MyUIServlet extends VaadinServlet {}
}

此UI是应用程序的入口点。 UI可以表示浏览器窗口(或选项卡),也可以表示嵌入Vaadin应用程序HTML页面的某些部分。 UI使用VaadinRequest初始化。 旨在重写此方法以将组件添加到用户界面并初始化非组件功能。

实际上,到目前为止,我们已经准备好运行该项目,以显示由Vaadin原型本身制作的默认应用程序布局。 运行以下命令以运行项目:

运行项目

mvn jetty:run

访问以下网址以查看该应用程序的运行情况:

打开网址

http://localhost:8080/

我们现在可以尝试该应用程序:

运行示例应用程序

运行示例应用程序

8. Vaadin布局管理器

我们上面运行的示例应用程序使用VerticalLayout来以垂直方式排列UI元素。 与VerticalLayout相似,Vaadin为我们提供了各种布局管理器,以将UI组件布置在不同的方向。 让我们探讨一下经理是什么

8.1 VerticalLayout

当我们需要将组件堆叠在单个列中,其中第一个元素保留在底部,其余元素显示在上述组件下方时,我们可以使用VerticalLayout布置:

垂直布局

VerticalLayout vertical = new VerticalLayout();
vertical.setSpacing(true);
vertical.setMargin(true);
setContent(vertical);

添加到此布局的所有组件都将堆叠在一起。 请注意,与每个组件( 布局也是一个组件 )相关的方法,其样式均采用基于它们设置CSS属性的名称。 这使得方法名称易于猜测并且更具可读性。

8.2 Horizo​​ntalLayout

与将组件VerticalLayout放置的VerticalLayoutHorizontalLayout将组件水平放置。 让我们看一下如何实例化此布局的示例:

水平布局

final HorizontalLayout layout = new HorizontalLayout();

在示例应用程序,只需更换VerticalLayoutVerticalLayout和看到的布局现在怎么会出现:

Vaadin水平布局

Vaadin水平布局

8.3网格布局

另一个布局GridLayout允许我们制作一个组件网格,该网格为我们渲染的页面提供了非常光滑一致的外观。

网格布局

GridLayout gridLayout = new GridLayout(3, 2);

继续并尝试使用现有布局中的GridLayout来处理UI组件的布局。

8.4 FormLayout

最后,我们可以使用FormLayout将组件的标签和组件本身放在两个单独的列中,并且还可以为必填字段提供可选的指示器。 可以实例化为:

表格布局

FormLayout formLayout = new FormLayout();

9. Vaadin成分

在本节中,我们将介绍一些基本但最有用的Vaadin UI元素,这些元素几乎在所有用于Web的UI中使用。

9.1标签

Label是用于显示静态文本的组件,该文本不会随应用程序状态而改变。 让我们定义一个提供Label实例并将其设置在VerticalLayout的函数:

标签

private Layout showLabels() {final VerticalLayout layout = new VerticalLayout();Label label = new Label();label.setId("LabelID");label.setValue("JavaCodeGeeks");label.setCaption("Label");layout.addComponent(label);return layout;
}

Label外观如下:

Vaadin中的标签

Vaadin中的标签

在提供外部网页地址时,Vaadin提供了具有相同目的的链接组件:

链接

private Layout showLink() {final VerticalLayout layout = new VerticalLayout();Link jcgLink = new Link("JavaCodeGeeks",new ExternalResource("https://www.javacodegeeks.com/"));jcgLink.setTargetName("_blank");layout.addComponent(jcgLink);return layout;
}

这是Link外观:

Vaadin Link组件

Vaadin Link组件

9.3文字栏位

TextFields是由Label组件和允许用户提供输入的单行TextArea组合而成的组件。 这是一个示例程序,用于显示带有图标的TextField以及Vaadin库中内置的图标:

文本域

private Layout showTextField() {final VerticalLayout layout = new VerticalLayout();TextField textField = new TextField();textField.setIcon(FontAwesome.USER);layout.addComponent(textField);return layout;
}

这是TextField外观:

Vaadin TextField组件

Vaadin TextField组件

9.4 TextArea

TextArea组件就像TextField组件一样,唯一的区别是TextArea组件中允许多行输入。 让我们看一个演示:

文字区域

private Layout showTextArea() {final VerticalLayout layout = new VerticalLayout();TextArea textArea = new TextArea();layout.addComponent(textArea);return layout;
}

这是TextArea外观:

Vaadin TextArea组件

Vaadin TextArea组件

TextArea组件使我们可以在组件中输入大文本并反映应输入的文本限制。

9.5 DateField和InlineDateField

在Web UI中,选择日期是非常常见的任务。 Vaadin提供了两个相同的元素DateFieldInlineDateFieldDateField组件显示一个下拉日历,我们可以在其中选择一个日期。 在其中选择日期后, InLineDateField不会消失。 让我们看一个示例程序:

DateField和InlineDateField

private Layout showDateField() {final VerticalLayout layout = new VerticalLayout();DateField dateField = new DateField("DateField", LocalDate.now());InlineDateField inlineDateField = new InlineDateField();layout.addComponent(dateField);layout.addComponent(inlineDateField);return layout;
}

这是DateField外观:

Vaadin DateField组件

Vaadin DateField组件

这是InLineDateField外观:

Vaadin内联DateField组件

Vaadin内联DateField组件

用户从中选择日期后, InlineDateField不会消失。

9.6 PasswordField

要在用户界面中接受秘密密钥和密码,我们可以使用PasswordField 。 让我们看一个演示:

密码栏位

private Layout showPasswordField() {final VerticalLayout layout = new VerticalLayout();PasswordField passwordField = new PasswordField();layout.addComponent(passwordField);return layout;
}

这是PasswordField外观:

Vaadin PasswordField组件

Vaadin PasswordField组件

PasswordField是一个TextField ,它只是掩盖我们在其中输入的文本。

9.7按钮

为了使用户能够在某些情况下(例如提交表单或类似内容)执行操作,Button是最好的使用组件。 让我们看一个示例程序:

纽扣

private Layout showButton() {final VerticalLayout layout = new VerticalLayout();Button normalButton = new Button("Normal Button");layout.addComponent(normalButton);return layout;
}

这是Button组件的外观:

Vaadin按钮组件

Vaadin按钮组件

Vaadin允许我们制作多种类型的按钮,例如“危险”按钮(默认为红色),相当多的按钮等等。

9.8复选框

为了接受多个值到某个值,我们可以使用CheckBoxes ,它使用户可以设置或取消设置它们,而不必依赖UI中是否设置了其他CheckBoxes 。 让我们看一个示例程序:

复选框

private Layout showCheckBox() {final VerticalLayout layout = new VerticalLayout();CheckBox checkbox = new CheckBox("CheckBox");checkbox.setValue(true);layout.addComponent(checkbox);return layout;
}

这是CheckBox组件的外观:

Vaadin复选框组件

Vaadin复选框组件

9.9清单

作为最后一个组件,显示包含固定元素的项目列表是非常常见的任务。 让我们看一下如何做到这一点的演示:

清单

private Layout showLists() {final VerticalLayout layout = new VerticalLayout();List<String> numbers = new ArrayList<>();numbers.add("One");numbers.add("Ten");numbers.add("Eleven");ComboBox comboBox = new ComboBox("ComboBox");comboBox.setItems(numbers);layout.addComponent(comboBox);return layout;
}

这是Lists组件的外观:

Vaadin列表组件

Vaadin列表组件

因此,我们只创建了一个List来收集项目并将其显示在ComboBox元素中,该元素显示了一个包含List项目的下拉菜单。

10.使用Vaadin主题

Vaadin主题是将应用外观完全指向Vaadin项目使用的样式表中的新主题的最佳方式。 默认情况下,Vaadin提供了四个内置主题,我们可以随时更改它们。 内置主题是valo驯鹿变色龙runo 。 要查找样式表,请访问WebContent/themes/declarativeui/declarativeui.scss 。 我们可以在指定文件的末尾更改指定的主题值,这将更改应用程序选择的主题。

请查看Vaadin目录 ,查找几乎无限数量的可以在您的项目中使用的即用型Vaadin主题。

11.结论

在本课程中,我们研究了如何使用单个Maven命令创建非常简单但有效的Vaadin应用程序。 我们看到了生产级Vaadin应用程序需要哪些Maven依赖项和插件。 我们研究了Vaadin UI应用程序中常用的许多Vaadin组件。 对于Java后端工程师而言,Vaadin是一个出色的框架。 它提供了Java开发人员可以想到的所有优点,因为它允许基于Maven的构建系统进行依赖关系管理,这是一种非常简单的方法,可以直接在同一项目本身中直接使用Spring服务,或者仅遵循设计模式来保持UI和网络层在项目中完全分开。

在未来的Vaadin课程中,我们将了解如何通过在应用程序中添加一个工作后端来使Vaadin应用程序动态化,例如使用Spring Boot应用程序从数据库向应用程序提供动态内容。

12.下载源代码

这是Vaadin框架的一个示例。

下载
您可以在此处下载此示例的完整源代码: Vaadin示例

翻译自: https://www.javacodegeeks.com/2018/05/vaadin-tutorial.html

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

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

相关文章

【定时同步系列5】Farrow内插器结构原理和MATLAB实现

引言 通常我们接收到的信号是过采样的 x ( m T s ) x(mT_s) x(mT

【数字信号处理】基于DFT的滤波系列6之维纳滤波理论推导与MATLAB仿真

维纳(Wiener)滤波 引言 罗伯特维纳(Norbert Wiener)是一位对信号处理理论做出重大贡献的神童。维纳滤波是其中之一,维纳-辛钦(Wiener-Khinchin)定理是另一个表明信号的功率谱密度是其自相关函数的傅里叶变换的定理。他也是控制论的“鼻祖”。 我们将看一下维纳滤波器的一个…

jee web_您基于JEE的Web项目的结构是什么?

jee web在这篇文章中&#xff0c;我将尝试讨论基于Web的项目的各种组织结构&#xff0c;主要是使用JSF。 开始新项目时&#xff0c;首先想到的是如何组织Java包&#xff1f; 想象一下&#xff0c;您开发了一个基于Web的用户和组管理系统。 很长时间以来&#xff0c;我使用了以下…

【数字信号处理】希尔伯特变换系列1之相位处理(含MATLAB代码)

利用希尔伯特变换进行相位处理 相位的频域处理 在讨论“理想DFT滤波”时,我们注意到通常信号的相位将保持不变,这意味着不会发生由非线性相位引起的失真。然而,应该总是考虑相位响应(或者至少意识到它的存在)和幅度响应。对于所有频率,应该考虑幅度和相位。那么一个明显的…

【数字信号处理】分贝dB、dBm的概念及其日常使用中常见的错误

分贝的基本概念 首先,分贝的英文为decibel,单位为dB;其中bel表示声音计量单位(单位为Bel),并且有 1 dB ⁡ = 1 / 10 Bel ⁡ 1\operatorname{dB}=1/10\operatorname{Bel} 1dB

日期使用

时区糟透了。 特别是夏令时。 我不介意像与此行为相关的编程错误那样&#xff0c;不停移动时钟或失去一个小时的睡眠。 更糟糕的是Java的旧日期/时间API。 Java社区通过JSR 310公开承认了这一点&#xff0c;该版本取代了Java Date&#xff06;Time API&#xff0c;但是由于其复…

【数字信号处理】复数的另一种思考之平均风向测量(Python实现)

平均风向和风速测量 气象站每分钟测量一次风向。编写一个程序来指示五分钟内的平均方向。在以下几组读数上试一试:12、15、13、9、16 358、1、359、355、2 210、290、10、90、170 修改您的程序以处理风速输入以及方向。代码 import cmath from matplotlib.pylab import * tau…

开源mindmap_Java开发人员访谈的MindMap

开源mindmap多年来&#xff0c;我在许多Java开发人员的访谈中担任小组成员。 之前&#xff0c;我曾写过一篇标题为成功参加软件工程师技术面试的7大技巧的文章&#xff0c;其中涵盖了很少的一般准则。 在本文中&#xff0c;我将分享一个思维导图&#xff0c;其中包含Java开发人…

【数字信号处理】希尔伯特变换系列2之基于定向多普勒超声的胎儿心率监测(含MATLAB代码)

希尔伯特变换的应用 希尔伯特变换在许多工程应用中都有使用,此处主要介绍两种用法。 首先,它解决了多普勒超声胎儿心率监测器中出现的运动方向不明确的问题。第二,它与众所周知的解析信号联系起来了,在极坐标中,它能够找到信号的瞬时幅度和瞬时频率。 基于定向多普勒超…

轻松地与Java完全集成

这里介绍了如何编写完整的堆栈数据库Web应用程序&#xff0c;而无需使用SQL&#xff0c;HQL&#xff0c;PHP&#xff0c;ASP&#xff0c;HTML&#xff0c;CSS或Javascript&#xff0c;而是使用Vaadin的UI层和Speedment Stream ORM完全依赖Java。 是否曾经想过快速创建连接到您…

MATLAB读取结构体mat文件报错已损坏

遇到一个挺奇怪的事情&#xff0c;用MATLAB R2021a保存下来的.mat文件&#xff0c;里面是一个结构体&#xff1b;结果在MATLAB R2018b中load这个mat文件&#xff0c;提示“无法读取&#xff0c;改文件可能已损坏” 初步猜想可能是MATLAB版本的问题&#xff0c;正好虚拟机里有便…

【自适应盲均衡11】基于Volterra级数的双线性CMA盲均衡算法与MATLAB仿真(采用16QAM信号模型)

结果预览 16QAM信号的星座图: 输入信号的星座图: Volterra-CMA盲均衡算法的MSE曲线: 均衡后的星座图: 一、Volterra级数 由于多方面的原因,Volterra级数模型是非线性系统广泛采用的模型。简单起见,本文仍采用线性系统进行测试。 Volterra级数展开是由非递归级数组成…

矩形和升余弦成型下OQPSK信号的调制与解调仿真(最大功率法定时)

关注公号【逆向通信猿】更精彩!!! 仿真结果预览 OQPSK矩形和升余弦成型误码率曲线: 关于QPSK信号的仿真在之前的博客里已经 一、OQPSK调制原理 在QPSK体制中,它的相邻码元最大相位差达到180。由于这样的相位突变在频带受限的系统中会引起信号包络的很大起伏,这是不希…

java web 刷新_Java Web项目的保存和刷新

java web 刷新如何配置计算机以保存并刷新Java Web项目&#xff1f; 当您向开发人员提出此问题时&#xff0c;答案以“哦&#xff0c;好吧……”开头&#xff0c;并以某种可行的方式继续描述。 每个人都有自己的方式。 首先–为什么需要这个&#xff1f; 因为执行复制和重新启…

【数字信号处理】希尔伯特变换系列3之解析信号(含MATLAB代码)

希尔伯特变换&解析信号 你可能从未将DFT应用于复信号,因此你的数据将是实的,这样做的一个影响是DFT是对称的。在许多应用中,正频和负频分量都必须被处理——参见早期理想的DFT滤波,其中正频和负频分量都必须以相同的方式处理,以便滤波后的数据是实的(根据需要)。然而…

Java SE 11(18.9)中的API更新

Java SE 11也被命名为18.9&#xff08;基于使用发布年份和月份的新命名方案&#xff09;&#xff0c;预计将在9月的最后一周发布GA。 频繁发布新JDK版本的新方法是允许语言创建者引入新功能&#xff0c;并向开发人员社区更快地进行API更新。 通常&#xff0c;API更新不会引起注…

【数字信号处理】卷积和乘法系列1之引言(含MATLAB代码)

引言 要了解 DSP 的许多方面,以及使用傅里叶分析 (FA) 的其他应用,以下几点很重要 了解卷积的过程要知道时间/频率域中的卷积/乘法 等价于 频域/时间域中的乘法/卷积会应用这些知识卷积是一个会引起很多混淆的过程,但使用采样数据(离散)比使用连续时间数据更容易理解。这是…

【数字信号处理】卷积和乘法系列2之AM调制、幅度谱和相位谱(含MATLAB代码)

关注公号【逆向通信猿】更精彩!!! 案例2的应用——幅度调制(AM) 能够预测卷积两个信号的结果是很有用的。一个明显的例子是 AM 调制(参见上一节 和下面的图 1),其中载波通过混合(混频)由基带信号调制。在频域中,这两个信号的频谱是卷积的。 在图1中,显示了幅度调制…

java方法传对象参数_Java方法中的参数太多,第2部分:参数对象

java方法传对象参数在上一篇文章中 &#xff0c;我研究了与方法和构造函数的长参数列表相关的一些问题。 在那篇文章中&#xff0c;我讨论了用自定义类型替换基元和内置类型以提高可读性和类型安全性。 这种方法使方法或构造函数的众多参数更具可读性&#xff0c;但并没有减少参…

VB语言与测量程序设计之水准网平差程序(任务8-3含代码,完整工程文件见CSDN资源)

一、程序总体设计 二、程序界面设计 对象属性设置 三、程序代码 矩阵计算类代码 文件名:Matrix.cls 操作矩阵的类 Matrix Option Explicit Const eps As Double = 0.00000001 缺省精度 Dim nRo