Lia*_*m G 3 java user-interface swing intellij-idea gradle
我有一个 Gradle 项目,我正在尝试创建一个 GUI(Swing,使用 Intellij);但是,我一直收到编译错误。完全相同的 GUI 代码可以在标准 Java 项目上运行并且编译良好。
图形用户界面
package gui;
import javax.swing.*;
public class ApplicationGUI {
private JPanel rootPanel;
private JLabel testLabel;
public static void main(String[] args) {
JFrame frame = new JFrame("ApplicationGUI");
frame.setContentPane(new ApplicationGUI().rootPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
摇篮
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'ca.uhn.hapi.fhir:hapi-fhir-base:3.7.0'
compile 'ca.uhn.hapi.fhir:hapi-fhir-structures-dstu3:3.7.0'
compile 'ca.uhn.hapi.fhir:hapi-fhir-client:3.7.0'
}
Run Code Online (Sandbox Code Playgroud)
错误
任务 :ApplicationGUI.main() FAILED 线程“main”中的异常 java.awt.IllegalComponentStateException: contentPane 不能设置为 null。在 javax.swing.JRootPane.setContentPane(JRootPane.java:621) 在 javax.swing.JFrame.setContentPane(JFrame.java:698) 在 gui.ApplicationGUI.main(ApplicationGUI.java:11)
在我的设置中,我将 GUI 设计器设置为 Java 源代码。
我究竟做错了什么?
干杯
编辑1:
我可以确认上面的代码在 Maven 上 100% 正常工作..
小智 14
通过更改 Intellij 设置解决:
我检查过:
我的代码是:
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);
});
}
}
Run Code Online (Sandbox Code Playgroud)
nul*_*ter -1
正如评论中提到的,您的 rootPanel 从未初始化,因此它为空。JFrame 默认情况下已经有一个 jpanel contentPane,因此您实际上不需要以下行,除非您打算替换它:
frame.setContentPane(new ApplicationGUI().rootPanel);
Run Code Online (Sandbox Code Playgroud)
公共无效setContentPane(容器contentPane)
设置 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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3229 次 |
最近记录: |