JFrame 显示不正确
JFrame not displaying properly
我已经有一段时间没有编写任何程序了,所以我可能遗漏了一些明显的东西。
我正在尝试 运行 以下代码,它应该创建一个空的 JFrame
并将其放在屏幕中央:
public class MainGUI
{
// This initilizes the main JFrame
public void MainGUI()
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Data Deriver");
//frame.setContentPane(makeGUI(frame));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,180);
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
new MainGUI();
}
}
但是,当我编译此代码(使用 JDK 8.0_45)和 运行 时,没有任何反应。没有 windows 打开,没有错误被抛出,实际上什么都没有发生。它编译没有错误,所以代码应该可以工作,但没有显示任何内容。
我真的不知道我哪里错了。
您只是在创建 MainGUI
class 的一个实例,但是您没有任何显式构造函数,所以之后您的程序就会退出。
您必须调用创建和显示框架的 MainGUI()
方法:
public static void main(String[] args) {
new MainGUI().MainGUI();
}
或者您可以将 MainGUI()
方法设为 constructor(当您编写 new MainGUI()
时会调用它)- 也许这就是您的意图:
public MainGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
// ...rest of your code
}
注:
请注意,您应该在 EDT(事件调度线程)中完成所有与摆动相关的工作,因此您应该在 EDT 中 运行 MainGUI()
像这样:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MainGUI();
}
});
}
有关详细信息,请参阅 Initial Threads。
编译时没有错误,
这是因为编译器正在为您创建一个默认构造函数,因为您对 MainGUI() 的声明在编译器看来是一个函数,具有 'void' return 类型。
您想要的(理想情况下)是从 MainGUI() 中删除 return 类型声明,您将得到您期望的结果。 (执行时实例化的 GUI)
问题是这样的:
public void MainGUI() {
^
}
void 导致它不是构造函数。使用 void 系统正在创建一个空白(默认)构造函数,它是空的,不会 运行 任何东西。删除它,它将起作用。我们都会不时犯错误:)
我已经有一段时间没有编写任何程序了,所以我可能遗漏了一些明显的东西。
我正在尝试 运行 以下代码,它应该创建一个空的 JFrame
并将其放在屏幕中央:
public class MainGUI
{
// This initilizes the main JFrame
public void MainGUI()
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Data Deriver");
//frame.setContentPane(makeGUI(frame));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,180);
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
new MainGUI();
}
}
但是,当我编译此代码(使用 JDK 8.0_45)和 运行 时,没有任何反应。没有 windows 打开,没有错误被抛出,实际上什么都没有发生。它编译没有错误,所以代码应该可以工作,但没有显示任何内容。
我真的不知道我哪里错了。
您只是在创建 MainGUI
class 的一个实例,但是您没有任何显式构造函数,所以之后您的程序就会退出。
您必须调用创建和显示框架的 MainGUI()
方法:
public static void main(String[] args) {
new MainGUI().MainGUI();
}
或者您可以将 MainGUI()
方法设为 constructor(当您编写 new MainGUI()
时会调用它)- 也许这就是您的意图:
public MainGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
// ...rest of your code
}
注:
请注意,您应该在 EDT(事件调度线程)中完成所有与摆动相关的工作,因此您应该在 EDT 中 运行 MainGUI()
像这样:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MainGUI();
}
});
}
有关详细信息,请参阅 Initial Threads。
编译时没有错误, 这是因为编译器正在为您创建一个默认构造函数,因为您对 MainGUI() 的声明在编译器看来是一个函数,具有 'void' return 类型。
您想要的(理想情况下)是从 MainGUI() 中删除 return 类型声明,您将得到您期望的结果。 (执行时实例化的 GUI)
问题是这样的:
public void MainGUI() {
^
}
void 导致它不是构造函数。使用 void 系统正在创建一个空白(默认)构造函数,它是空的,不会 运行 任何东西。删除它,它将起作用。我们都会不时犯错误:)