【发布时间】:2018-01-03 14:54:16
【问题描述】:
我刚开始接触 Java,我遇到了这个我不理解的概念。
我想知道如何从另一个类打开使用 IntelliJ 的 Swing 表单编辑器开发的表单。请参阅下面的代码在一个类中运行良好。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUIApp extends JPanel{
private JButton button1;
private JLabel label1;
private JPanel panel1;
private int iCount;
public GUIApp() {
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
iCount++;
label1.setText(Integer.toString(iCount));
}
});
}
public static void main(String[] args){
JFrame frame = new JFrame("GUIApp");
frame.setContentPane(new GUIApp().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
当我尝试修改它以使用 main 方法从另一个类创建表单时,我遇到了麻烦。
GUIApp.java
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUIApp extends JPanel{
private JButton button1;
private JLabel label1;
public JPanel panel1;
private int iCount;
public GUIApp() {
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
iCount++;
label1.setText(Integer.toString(iCount));
}
});
}
}
App.java
import javax.swing.*;
public class App {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("GUIApp");
frame.setContentPane(new GUIApp().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
我尝试将许多不同的东西传递给 setContentPane 方法,但都没有成功。
我目前得到的错误信息如下:
Exception in thread "main" java.lang.NoSuchMethodException: GUIApp.main([Ljava.lang.String;)
at java.lang.Class.getMethod(Class.java:1786)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)
【问题讨论】:
-
请查看此讨论以获取一些提示:stackoverflow.com/questions/19812806/…
-
如果我将 setContentPane 的代码编辑为 frame.setContentPane(new GUIApp().getter());并在 GUIApp 类中创建一个名为 getter 的新方法,该方法返回 JPanel。我仍然得到同样的错误。我真的不明白这个问题或为什么这与上面链接中的回复不同。
-
也试过 frame.getContentPane().add(new GUIApp());和 frame.getContentPane().add(new GUIApp().getter());
标签: java swing intellij-idea