java - IntelliJ GUI 表单未出现

标签 java swing intellij-idea formbuilder swingbuilder

我正在使用 IntelliJ 和内置表单设计器制作一个简单的天气应用程序。我制作并设计了一个表单并相应地编辑了绑定(bind)的类文件。当我实际运行代码时,我设计的表单现在完全显示出来了,事实上,只有最后一行 (maxtemp) 是显示在空白屏幕上的唯一值。

P.S 我使用 Gradle 进行构建,我还设置 GUI 设计器使用 Java 源代码而不是字节代码(因为 Gradle 不支持字节代码)

import org.json.JSONException;
import org.json.JSONObject;

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


public class Frame extends JFrame {

// Get the API
private API api = new API();

// Form elements
public JPanel mainPanel;
public JLabel text;
public JLabel category;
public JLabel mintemp;
public JLabel maxtemp;
public JLabel link;


public Frame() throws Exception, JSONException {

    initFrame();

}

public void initFrame() throws Exception, JSONException {

    // Get API response
    JSONObject wjson = api.connection();

    // Filter response and get data
    String[] data = api.respFilter(wjson);


    // Swing components
    mainPanel = new JPanel(new BorderLayout());
    text = new JLabel();
    category = new JLabel();
    mintemp = new JLabel();
    maxtemp = new JLabel();
    link = new JLabel();


    // Add to the frame
    add(mainPanel);
    add(text);
    add(category);
    add(mintemp);
    add(maxtemp);


    text.setText(data[0]);
    category.setText(data[1]);
    mintemp.setText(data[3]);
    maxtemp.setText(data[4]);


}

public static void main(String[] args) throws Exception, JSONException {
    JFrame app = new Frame();
    app.setTitle("Java-WeatherApp");;
    app.setSize(900, 600);
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setLocationRelativeTo(null);
    app.setVisible(true);
}

}

我对 Java 非常陌生,对 IntelliJ 上的表单生成器也非常陌生。不幸的是我找不到任何关于表单生成器的好的教程。如有任何帮助,我们将不胜感激!

最佳答案

JFrame 将 BorderLayout 作为默认布局。

在调用时的 initFrame() 方法中,

add(mainPanel);
add(text);
add(category);
add(mintemp);
add(maxtemp);

您正在将所有 swing 组件添加到 JFrame 中。由于您没有指定组件的位置,并且 JFrame 具有 BorderLayout,因此仅将一个组件添加到 JFrame 中,即添加到其中的最后一个组件是 maxtemp Jlabel。

添加到具有 BorderLayout 的 JFrame 时,应指定组件的位置,如下所示,

add(minTemp, BorderLayout.NORTH);

我建议您了解有关 BorderLayout 和 LayoutManagers 的更多信息。

或者,

您可以使用与此类似的代码,

// Swing components
mainPanel = new JPanel(new GridLayout(4, 1));
text = new JLabel();
category = new JLabel();
mintemp = new JLabel();
maxtemp = new JLabel();
link = new JLabel();

// Add to the mainPanel
mainPanel.add(text);
mainPanel.add(category);
mainPanel.add(mintemp);
mainPanel.add(maxtemp);

//Add mainPanel to Frame
add(mainPanel);

上面编写的代码执行以下操作,

  • mainPanel = new JPanel(new GridLayout(4, 1)); 这行代码将 GridLayout 设置为 mainPanel 的布局。 GridLayout 是一种布局管理器,它通过将容器(mainPanel)划分为行和列来将其划分为相同数量的网格。 在给定的代码中,我将 mainPanel 分为 4 行 1 列,因此总共 4 个网格。

    mainPanel.add(text); mainPanel.add(类别); mainPanel.add(mintemp); mainPanel.add(maxtemp);

  • 这堆代码将 swing 组件添加到 mainPanel 中。当执行第一行代码时,文本标签将添加到第一个网格中的 mainPanel 中。同样,第二行将类别添加到第二个网格,其余的类似。

  • add(mainPanel); 这行代码将 mainPanel 添加到 Frame 中。

如果执行上述代码,输出将类似于: enter image description here

注意:我已经更改了标签的文本,如上图所示。

关于java - IntelliJ GUI 表单未出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975947/

相关文章:

java - JFileChooser 自定义 - 将渐变绘制设置为 JFilechooser

intellij-idea - 在功能上单击 F1 时,如何让 IntelliJ/Android Studio 打开 Android 文档?

java - Intellij + Bitbucket 中的微服务 + 项目

java - JFrame 装饰有 Windows 边框,即使 Look&Feel 设置为其他方式

java - 如何在 IntelliJ 中的有效位置根项目?

java - 在 emacs 中跳转 java 方法

java - 使用鼠标事件勾画 Shape3d javafx

java - 在 JSP Servlet 中处理 Ajax 请求

java - 生产者消费者阻塞队列

java - VMware vCenter Web 客户端 UI 和数据服务调整