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,一经查实,立即删除!

相关文章

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

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

开源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。 是否曾经想过快速创建连接到您…

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

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

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

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

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

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

Gradle教程

1.简介 在本课程中&#xff0c;我们将学习Gradle &#xff0c;它是一个构建工具和一个依赖管理系统&#xff0c;与Maven和Ant非常相似&#xff0c;并且是专门为构建基于Java的项目而设计的。 与Maven和Ant构建系统不同&#xff0c;Gradle不使用XML。 它实际上是基于Groovy构建…

【定时同步系列6】Gardener误差检测算法原理

关注公号【逆向通信猿】更精彩!!! 引言 离散时间符号定时同步方法 如下图所示为比较常用的一种符号定时同步的离散时间方法,通常由三个基本单元组成离散时间锁相环,分别为:定时误差检测器(TED)、环路滤波器和插值控制。其中,插值器和TED作用相当于鉴相器,插值控制相…

【数字信号处理】卷积和乘法系列3之测不准原理

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenberg不确定性原理的一个例子。时域中的扩展(方差)乘以频域中的扩展具有不能被突破的…

【数字信号处理】卷积和乘法系列3之傅里叶变换对II

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! 采样 傅里叶变换对(FT)很重要的原因是,如果有一个连续时间 (CT) 信号,则可以通过将信号乘以梳状函数来对其进行采样,产生的样本将只是尖峰处的值。采样过程产生离散时间 (DT) 信号,因为采…

【定时同步系列8】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇一

结果预览 误码率曲线 关于反馈型定时同步技术的原理已经陆陆续续讨论了好久了,涉及的各个细节内容较多,且不容易理解,整个流程框图如下所示: 符号定时同步的离散时间方法(异步) 其中, interpolator模块在博客: 【定时同步系列5】Farrow内插器结构原理和MATLAB实现 TED模…

eclipse 隐藏项目_前5个有用的隐藏Eclipse功能

eclipse 隐藏项目Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的&#xff0c;它是如此之大&#xff0c;需要花费数年才能掌握。 然后&#xff0c;您的经理出现并告诉您&#xff1a;我们正在使用NetBeans。 …

使用Spring Security和OAuth 2.0保护Spring微服务架构

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 每个开发人员都希望能够更快&#xff0c;更有效地进行构建以支持规模。 使用Spring构…

一种使用setdll+HOOK钩子技术+dll为MFC程序ProtocalTool等老旧程序打补丁的思路(含源码)

一、引言 由于工作原因,需要使用一个很老旧的软件,没有源代码,该软件在XP系统下运行正常,但是需要登录,且在win10系统下使用时IP控件运行不正常,只能输入每个数字只能输入2位数,还有一些其他问题,比如给软件添加一些编辑框,或者对软件进行 下面简单梳理一下解决这些…

访存优化_Hibernate事实:多级访存

访存优化在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中&#xff0c;我们需要使用其树&#xff0c;分支和叶子加载森林&#xff0c;并且我们将尝试查看Hibernate在三种集合类型上的表现&#xff1a;集合&#xff0c;索引列表和包。 这是我们的类层次结构的样子…

基于ARM的字符串拷贝实验(嵌入式系统)

基于ARM的字符串拷贝实验 一,实验目的 1.掌握ARM汇编指令LDR、STR和B等的使用方法,完成较为复杂的存储区访问和程序分支,学会使用条件码。 2.掌握完整的ARM汇编程序结构,具备初步的程序编写能力。 3.掌握ADS1.2集成开发环境的工程建立、编译参数设置、程序编译和调试等…

利用根升余弦滤波器和整数倍内插的多相结构生成含采样频偏的过采样信号

多相表示在多抽样率信号处理中是一种基本方法,使用它可以在实现整数倍和分数倍抽取和内插时提高计算效率。 目前我能想到的应用是信号的成型滤波,需要内插,然后与低通滤波器(成型时为过采样的(根)升余弦波形)进行卷积,这个过程如果直接去计算的话,会有很多多余的乘法操作…

java与java ee_CapeDwarf – Java EE上的Google App Engine

java与java ee我有很多爱好。 从早期的Java EE规范一路走来&#xff0c;并用Java EE 7进行了“云”之旅&#xff0c;我很好奇看到新宣布的CapeDwarf项目有什么库存&#xff0c;可以在内部引入Google的平台即服务&#xff0c;提供“ Google App Engine ” 。 到目前为止的故事 …

基于MATLAB的高阶(两个二阶级联构成的四阶以及更高阶)数字图形音频均衡器系数计算(可直接用于DSP实现)

引言 前不久,在数字信号处理中需要对音频信号进行滤波,涉及图形均衡器、参数均衡器的设计,下面这个链接给出了一个图形音频均衡器的例子: https://arm-software.github.io/CMSIS_5/DSP/html/group__GEQ5Band.html 这个示例演示如何使用 Biquad 级联函数构建 5 波段图形均衡…