4 回答

TA貢獻1712條經驗 獲得超3個贊
通過更改 intellij 設置解決:
我檢查過:
自動導入...
使用 -set -intellij 構建和運行
使用 -set -intellij 運行測試
Gradle JVM - 設置 - 使用項目JDK
我的代碼是:
package com.mygdx.game.desktop;
import javax.swing.*;
import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.mygdx.game.MyGdxGame;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MainForm {
private JPanel mainpanel_1;
private JPanel visualizationPanel_1;
private JButton button1;
private static MyGdxGame visualization;
private JFrame mainFrame;
public MainForm(JFrame frame) {
mainFrame = frame;
}
public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("My First Swing Example");
frame.setResizable(false);
frame.setMinimumSize(new Dimension(1300, 850));
frame.setSize(1300, 850);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainForm mf = new MainForm(frame);
if(mf.mainpanel_1 != null) {
frame.setContentPane(mf.mainpanel_1);
}
visualization = new MyGdxGame();
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.width = 1200;
config.height = 800;
config.forceExit = false;
config.resizable = false;
LwjglAWTCanvas lwjglCanvas = new LwjglAWTCanvas(visualization, config);
mf.visualizationPanel_1.add(lwjglCanvas.getCanvas());
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
lwjglCanvas.stop();
System.exit(0);
}
});
frame.pack();
// Setting the frame visibility to true
frame.setVisible(true);
});
}
}

TA貢獻1812條經驗 獲得超5個贊
只是將執行從 Gradle 更改為 Intellij 并不能解決主要問題,因為在構建 Gradle jar 時它將繼續不起作用。
我執行了以下操作來解決問題并繼續使用 Gradle。
進入Editor -> GUI Designer -> Generate GUI into
,選擇Java源
將 Intellij 表單依賴項添加到您的 gradle 項目
implementation 'com.intellij:forms_rt:7.0.3'
轉到編輯器的 GUI 并進行一些更改(例如創建新組件或更改標簽),這樣 Intellij 將生成必要的代碼。
運行主類

TA貢獻1735條經驗 獲得超5個贊
這似乎是 Gradle 和 Intellij 之間的問題。一個解決方案是遷移到 Maven。GUI的.form
文件(由 Intellij 生成)應在該行初始化,frame.setContentPane(new ApplicationGUI().rootPanel);
但這不會發生。使用 Maven 時沒有問題。

TA貢獻2037條經驗 獲得超6個贊
如評論中所述,您的 rootPanel 從未初始化,因此它為空。默認情況下,JFrame 已經有一個 jpanel contentPane,因此您實際上并不需要以下行,除非您打算替換它:
frame.setContentPane(new ApplicationGUI().rootPanel);
公共無效 setContentPane(容器內容窗格)
設置 contentPane 屬性。此方法由構造函數調用。Swing 的繪制體系結構需要包含層次結構中的不透明 JComponent。這通常由內容窗格提供。如果您替換內容窗格,建議您將其替換為不透明的 JComponent。
下面是一些創建框架并為其添加標簽的示例代碼。
public class ApplicationGUI{
public static void main(String[] args) {
JLabel aLabel = new JLabel("some text");
JFrame frame = new JFrame("ApplicationGUI");
frame.getContentPane().add(aLabel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
}
添加回答
舉報