gpt4 book ai didi

java - IntelliJ GUI 表单未出现

转载 作者:行者123 更新时间:2023-11-30 05:45:14 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com