【问题标题】:Calling IntelliJ Swing Forms from another class从另一个类调用 IntelliJ Swing Forms
【发布时间】: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


【解决方案1】:

啊……这很简单。惊讶的是没有人跳出来解码错误信息,但我想我需要在早上用新的眼睛检查它,它才会出现在我身边。

我认为主要问题是编译器试图运行 GUIApp 类而不是 App 类,并且因为我删除了主类而吓坏了。即,我在进行更改后没有执行正确的课程。

最后我使用了这段代码:

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.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().add(new GUIApp().getter());
                frame.pack();
                frame.setVisible(true);


            }
        });
    }
}

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;
    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 JPanel getter(){
        return this.panel1;
    }

}

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2014-02-07
    • 2018-06-09
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多