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);
}
}
添加回答
举报