Форма IntelliJ GUI не отображается - PullRequest
0 голосов
/ 04 марта 2019

Я делаю простое приложение погоды, используя IntelliJ и встроенный дизайнер форм.Я сделал и спроектировал форму и соответственно отредактировал файл связанного класса.Когда я на самом деле запускаю код, разработанная мною форма теперь вообще не появляется, фактически только последняя строка (maxtemp) является единственным значением, которое отображается на пустом белом экране.

PS Я использую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.К сожалению, я не смог найти хорошие учебники по построителю форм.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 04 марта 2019

JFrame имеет BorderLayout в качестве макета по умолчанию.

В вашем методе initFrame() при вызове

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

Вы добавляете все компоненты свинга в JFrame.Поскольку вы не указываете положение компонента, и, поскольку JFrame имеет BorderLayout, только один компонент добавляется к JFrame, который является последним компонентом, который вы добавляете в него, и это maxtemp Jlabel.

Вы должны указать положение компонента при добавлении в JFrame с BorderLayout следующим образом:

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 как макет главной панели.GridLayout - это тип менеджера компоновки, который делит контейнер (mainPanel) на равное количество сеток, разделяя его на строки и столбцы.В данном коде я разделил mainPanel на 4 строки и 1 столбец, таким образом, всего 4 сетки.

    mainPanel.add (text);mainPanel.add (категория);mainPanel.add (mintemp);mainPanel.add (maxtemp);

  • Этот набор кода добавляет компоненты колебания к главной панели.Когда выполняется первая строка кода, текстовая метка добавляется в mainPanel в первой сетке.Аналогично, вторая строка добавляет категорию во вторую сетку и аналогична для остальных.

  • add(mainPanel); Эта строка кода добавляет mainPanel к кадру.

Если вы выполнили приведенный выше код, вывод будет аналогичным, enter image description here

Примечание: Я изменил текст меток, как показанона изображении выше.

...