netbeans 如何在swing应用程序中使用FlatLaf库?

lmvvr0a8  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(245)

下面是我的简单应用程序:

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的库,它没有工作。有人可以做一个小的完全新手教程如何做到这一点?

vs3odd8k

vs3odd8k1#

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

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

您可以下载并安装以下文件:
1.二进制文件:这是Java虚拟机执行的字节码。在您的示例中,此文件名为 flatlaf-1.1.jar。这是迄今为止的最新发行版。这些文件通常(如在本示例中)仅包含库名称和版本。如果选择此选项,则这是使用库所必需的绝对必需文件。
1.JavaDoc文件:这个文件包含了每个类、方法、字段的注解,以及开发人员随代码一起提供的任何文档。在您的情况下,这个文件称为 flatlaf-1.1-javadoc.jar。通常开发人员提供的联机文档甚至可以HTML格式下载,但是事先下载这个文件,可以让您随时在IDE中看到这些文档(即项目编辑器,如NetBeans或IntelliJ)即使在脱机时也是如此。所以这个文件是一个非常好的文件,但不是绝对强制的文件。
1.源文件:这是一个包含每个类、方法、字段的源代码的文件,通常还有库的代码,捆绑在一个jar文件中。在您的例子中,这个文件被称为 *flatlaf-1.1-sources.jar 。如果您将项目与这个源代码文件连接,您可以看到实际的代码(不是像二进制的情况那样的Java字节码,而是Java纯文本源代码)。然后,该文件也不是绝对必需的,但是如果文档中有什么内容不够清楚(或缺少),那么它是一个很好的参考。
到目前为止,我提到的所有文件都可以在网站引导你找到它们的地方找到,例如,你想要的库的最新版本文件都可以在here中找到。首先导航到FlatLaf's home page,然后在此页面上向下滚动一点,找到 Download 部分,该部分提供了另一个链接,即Maven存储库中的链接(特别是this one)。在那里你可以找到如何将库链接到你的项目的说明,当然,也可以下载必要的文件。在这个例子中,右上角有两个按钮,一个名为“浏览”,另一个名为“下载”。“下载”按钮只是下拉所有资产的列表(即文件)。
浏览 * 按钮导航到服务器的目录,在那里你可以找到所有的文件与 * 下载 * 按钮的下拉列表,所以让我们转到那里,以便查看所有可用的文件...
如果你去那里,你可以看到更多的文件。他们中的大多数是重要的安全,这是我还没有涵盖的东西。它总是很重要的是验证完整的文件,你下载,因为如果不这样做,则会存在安全风险。例如,您不希望下载的库是由网络钓鱼站点提供的恶意副本。所以你需要验证它们和你正在访问的链接。诚然,当下载库时,我不经常这样做,但我觉得,我的疏忽,并不使它成为我不应该提到的东西。所以我警告你:请注意您正在下载的内容。
让我们休息一下,看看所有这些文件(最有可能)是什么:

  1. jar文件是你需要让事情正常工作的主要文件,它们就是我上面提到的文件。
  2. pom文件我认为是Apache Maven构建系统的一个设置文件。
  3. asc文件是PGP签名。
  4. md5、sha1、sha 256和sha 512是哈希值。如果你熟悉的话,你知道我在说什么。所以你应该后退一步,验证你刚刚下载的主(jar)文件的签名和哈希值。
    在我看来,验证完整性的最好方法是下载源代码,自己验证,然后通过提供的资源,构建源代码(如果你信任你的编译器)并安装。但这并不简单,也不节省时间。我提供的所有链接可能包含恶意内容:我只是还不知道,因为我还没有花必要的时间来验证。所以继续在你自己的风险,因为他们通常说。也注意我得到一个警告时,下载jar文件一般是因为“他们不信任”的消息说。继续...

选项2:与构建系统同步

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

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

你可以从GitHub下载源代码(至少是这个软件的源代码),有时候也可以通过FTP站点下载,或者从提供相应内容的在线服务器下载,然后编译它。你想要的库的源代码位于here,从问题中你可能已经知道了。

安装

现在,您已经下载(并验证)或构建了所需的内容,实际安装如下所示...我将针对NetBeans 8.2 IDE和Java 8(FlatLaf支持的最低版本)进行演示,但我猜每个IDE和版本的步骤通常都是相同的。如果不是,您可以更具体地介绍您的环境,然后我们再讨论。
1.在项目中包括编译的库(flatlaf-1.1.jar),如下所示:在NetBeans的 Projects 标签(通常在IDE的左侧)中右键单击项目,然后转到最底部名为 Properties 的按钮并单击它。在弹出的对话框中,从对话框左侧的 Categories 部分中选择名为 Libraries 的类别。从中间选择 Compile 标签。然后点击右边的 Add JAR/Folder。然后选择你的库文件并点击 Open 来包含它。就是这样。你现在基本上已经准备好开始在你的项目中包含FlatLaf的类了,因为这个文件是绝对必需的,正如我上面所说的。
1.接下来是JavaDoc文件。在项目中创建一个类,并通过导入它来使用库中的一个类,并声明一个引用作为导入类的示例。在类名上按CTRL+空格键...一个对话框弹出,说明没有附加JavaDoc,并给你一个位置,上面写着“Attach JavaDoc...”或类似的内容。单击它,然后单击 Add ZIP/Folder 按钮。选择JavaDocjar文件并确认您的选择。
1.最后是源代码文件。当你已经准备好了代码中的类引用,按住CTRL键左键单击类名。这会让你进入源代码。你会看到只显示了方法名,每个方法体都写着 Compiled Code,如果你展开/展开它,然后你会看到注解中的字节码。2这意味着源代码没有被附加。3你看到的是编译后的jar文件的字节码。4在编辑器的右上角,现在有一个按钮,上面写着 *Attach Sources... *。2点击它,然后弹出一个对话框。3点击按钮 * AddZip/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。在您问题中的代码中,您似乎没有应用LAF,因为您首先创建了JFrame(通过构造函数的super调用),然后以一种同样不推荐的方式安装LAF。

aelbi1ox

aelbi1ox2#

当你提供一个main方法,并在main方法中运行LookAndFeel setter,在任何Swing代码之前,而不是在构造函数中运行时,这将起作用。请注意,你已经安装了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();
            }
        });
    }
}

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

相关问题