【问题标题】:How to use FlatLaf library in swing application?如何在 Swing 应用程序中使用 FlatLaf 库?
【发布时间】:2021-09-10 04:21:42
【问题描述】:

这是我的简单应用:

public class MainFrame extends JFrame{
    private Dimension size;
    private JPanel buttonPanel;
    private JButton button;

public MainFrame() throws ClassNotFoundException{
    super("Applikacja1");
   
    try {
        UIManager.setLookAndFeel("com.formdev.flatlaf.FlatDarkLaf");
    } catch (Exception ex) {
       
    }
    JFrame.setDefaultLookAndFeelDecorated(true);
    size = new Dimension(350, 530);
    setPreferredSize(size);
    setMinimumSize(size);
    setLocationRelativeTo(null);
    setLayout(new BorderLayout());
    pack();
    
    //setting button 
    button = new JButton("Start programu");
    button.setVisible(true);
    this.add(button);


    
    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setResizable(false);
}
}

为了将此程序的外观更改为 FlatLaf 并使用他们的库,我需要做什么? 我需要从网上下载什么?我尝试下载整个代码(从这里https://www.formdev.com/flatlaf/)接下来将它作为库添加到netbeans,但它没有用。有人可以做一个小新手教程怎么做吗?

【问题讨论】:

  • 代码看起来正确。您需要添加更多控件来验证您使用的是 FlatLaf(例如按钮、复选框等)。一个简单的标签看起来与系统的外观和感觉没有太大区别。

标签: java swing netbeans


【解决方案1】:

我不是这方面的专家,但这里有一些说明:

选项1:手动下载文件并安装

您可以下载并安装以下文件:

  1. 二进制文件:这是由 Java 虚拟机执行的字节码。在您的情况下,此文件称为 flatlaf-1.1.jar。这是迄今为止的最新版本。这些文件通常(在本例中)仅包含库名称和版本。如果您选择此选项,这是能够使用该库所需的绝对强制性文件。
  2. JavaDoc 文件:这是包含每个类、方法、字段的文档化 cmets 的文件,通常是开发人员随代码提供的任何文档。在您的情况下,此文件称为 flatlaf-1.1-javadoc.jar。通常,开发人员提供了一个在线文档,甚至可以以 HTML 格式下载,但事先下载此文件,您可以随时在 IDE(即项目编辑器,如 NetBeans 或 IntelliJ)中查看文档,即使在离线时也是如此。所以这个文件是一个很好的文件,但不是绝对强制的。
  3. 源文件:这是包含每个类、方法、字段的源代码的文件,通常还包含库的代码,捆绑在一个 jar 文件中。在您的情况下,此文件称为 flatlaf-1.1-sources.jar。如果您将您的项目与此源文件连接,您将受益于查看实现该库的实际代码(不是二进制的 Java 字节码,而是 Java 纯文本源代码)。然后这个文件又不是绝对强制性的,但如果文档中的某些内容不够清楚(或缺失),最好咨询一下。

到目前为止我提到的所有文件都可以在网站引导您找到它们的地方找到,例如您所需库的最新版本文件可以一起找到here。您可以按如下方式找到此链接:首先导航到 FlatLaf's home page,然后在此页面上向下滚动一点以找到 Download 部分,它为您提供了另一个链接,即 Maven 存储库中的那个(特别是this 一)。在那里,您可以找到有关如何将库链接到您的项目的说明,当然,还可以下载必要的文件。在这种情况下,右上角有两个按钮,一个称为 Browse,另一个称为 Downloads下载 按钮只是简单地下拉所有可以下载的资产(即文件)的列表。 Browse 按钮将您导航到服务器的目录,您可以在该目录中找到由 Downloads 按钮的下拉列表显示的所有文件,所以让我们去那里以便查看所有可用文件...

如果你去那里,你可以看到更多的文件。它们中的大多数对于安全性都很重要,我还没有涉及到这一点。验证您下载的文件的完整性始终很重要,因为如果您不这样做,就会存在安全风险。例如,您不希望下载的库是网络钓鱼站点提供的恶意副本。因此,您需要将它们与您正在访问的链接一起验证。诚然,在下载库时,我并不经常这样做,但我觉得,我的疏忽,并没有使它成为我不应该提及的事情。所以我警告你:注意你正在下载的内容。

让我们休息一下,看看所有这些文件(最有可能)是什么:

  1. jar 文件是使事情正常工作所需的主要文件。它们就是我上面提到的文件。
  2. 我认为 pom 文件是 Apache Maven 构建系统的设置文件。
  3. asc 文件是 PGP 签名。
  4. md5、sha1、sha256 和 sha512 是哈希值。 如果你熟悉,你就知道我在说什么。因此,您应该退后一步,验证您刚刚下载的主 (jar) 文件的签名和哈希值。

在我看来,验证完整性的最佳方法是简单地下载源代码,自己验证并通过提供的资源进行验证,然后构建表单源(如果您信任您的编译器)并安装。但这不是那么简单,也不是时间保存。我提供的所有这些链接都可能包含恶意内容:我只是还不知道,因为我没有花必要的时间来验证。因此,正如他们通常所说的那样,继续自担风险。另请注意,我在下载 jar 文件时通常会收到警告,因为消息中显示“它们不受信任”。继续……

选项 2:与构建系统同步

如果您有一个系统来自动化项目的构建过程(而不是使用javac 命令行实用程序编译项目的每个Java源代码文件),例如Apache MavenGradle、@ 987654326@ 和其他人,那么您可以选择在您的项目中包含一个所谓的库依赖项并让构建系统同步(即下载并在构建过程中包含库)。这至少是我有点熟悉的 Gradle 发生的情况。至于其他我不是很熟悉,所以我就不再为他们说话了。请注意,有一些关于如何使用它们的说明、教程和文档,可以直接通过命令行,也可以通过 IDE。然后据我所知,库开发人员通常会让您知道如何在构建工具的设置文件中包含相应的依赖项。

选项 3:从源代码构建,然后安装

您可以从 GitHub 下载(至少是该软件的)源代码,或者有时通过 FTP 站点或通常从提供相应内容的某种在线服务器下载,然后构建它。你想要的库的源代码位于here,从问题来看,你可能已经发现了。

安装

现在您已经下载(并验证)或构建了您需要的东西,实际安装如下...我将演示带有 Java 8 的 NetBeans 8.2 IDE(FlatLaf 支持的最低版本),但我猜每个IDE和版本的步骤通常是相同的。如果不是,您可以更具体地了解您的环境,然后我们可以再次讨论。

  1. 在您的项目中包含已编译的库 (flatlaf-1.1.jar),如下所示:从 NetBeans 的 Projects 选项卡中右键单击项目(通常在左侧IDE) 并转到最底部的名为 Properties 的按钮并单击它。在弹出的对话框中,从对话框左侧的 Categories 部分中,选择名为 Libraries 的类别。从中间选择标签Compile,然后点击右侧的Add JAR/Folder。然后选择您的库文件并单击打开 以包含它。而已。您现在基本上已经准备好开始将 FlatLaf 的类包含到您的项目中,因为正如我在上面所说的,这个文件是绝对强制性的。
  2. 接下来,JavaDoc 文件。在项目中创建一个类,并通过导入该类并声明该导入类的示例来使用库中的类。在类名上按 CTRL+SPACE... 会弹出一个对话框,提示没有附加 JavaDoc,并为您提供一个单击位置,上面显示“附加 JavaDoc.. .”或类似的东西。单击它,然后单击添加 ZIP/文件夹 按钮,选择 JavaDoc jar 文件并确认您的选择。现在已经准备好了。
  3. 最后是源文件。当您在代码中准备好类引用时,按住 CTRL 键左键单击类名。这将使您获得源代码。您将看到只显示方法名称,并且每个方法主体都显示编译代码,如果您展开/展开它,那么您会在 cmets 中看到字节码。这意味着没有附加源。您正在查看已编译 jar 文件的字节码。在编辑器的右上角,现在有一个按钮,上面写着 Attach Sources...。单击它,然后弹出一个对话框。点击按钮 Add Zip/Folder...,导航并选择 flatlaf-1.1-sources.jar 文件,您现在可以看到该库的源代码。

构建示例应用程序

您可以咨询GitHub 页面,或指导您完成的项目主页。基本上你可以尝试以下方法:

import com.formdev.flatlaf.FlatDarkLaf;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Main {
    
    private static void createAndShowGUI() {
        FlatDarkLaf.setup();  //Must be called first of all Swing code as this sets the look and feel to FlatDark.
        
        final JPanel panel = new JPanel(); //FlowLayout.
        panel.add(new JButton("FlatDarkLaf button!"));
        panel.add(new JTextField("FlatDarkLaf text field!"));
        
        final JFrame frame = new JFrame("FlatDarkLaf test.");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(Main::createAndShowGUI);
    }
}

最后一点:您必须在创建任何 Swing 组件之前应用您的 LAF。在您问题的代码中,您似乎不是,因为您首先创建了JFrame(通过构造函数的super 调用),然后以同样不推荐的方式安装LAF。

【讨论】:

【解决方案2】:

当您提供一个 main 方法并在 main 方法中任何 Swing 代码之前运行 LookAndFeel setter 并且在构造函数中 not 时,这将起作用。请注意,您已安装 Java 8 或更高版本,并且您的类路径中有 FlatLaf jar。

您的代码已更正:

import java.awt.*;
import javax.swing.*;

public class MainFrame extends JFrame{
    private Dimension size;
    private JPanel buttonPanel;
    private JButton button;

public MainFrame() {
    super("Applikacja1");
   
//    try {
//        UIManager.setLookAndFeel("com.formdev.flatlaf.FlatDarkLaf");
//    } catch (Exception ex) {
//       
//    }
    JFrame.setDefaultLookAndFeelDecorated(true);
    size = new Dimension(350, 530);
    setPreferredSize(size);
    setMinimumSize(size);
    setLocationRelativeTo(null);
    setLayout(new BorderLayout());
    pack();
    
    //setting button 
    button = new JButton("Start programu");
    button.setVisible(true);
    this.add(button);
    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setResizable(false);
}
public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel("com.formdev.flatlaf.FlatDarkLaf");
        } catch (Exception ex) {
            System.err.println("Failed to initialize LaF");
        }

        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new MainFrame();
            }
        });
    }
}

代码中仍有一些小问题,但无论如何它都会按预期运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多