Java 如何避免在main方法中创建Swing元素?

Java 如何避免在main方法中创建Swing元素?,java,swing,static,Java,Swing,Static,目前我的代码不会运行,因为我没有main,但是当我创建main时,它必须是静态的,我的印象是,我不应该按照许多人的建议,将Swing元素的所有变量都设置为静态的。 我不知道如何在不使用main作为构造函数的情况下调用这些方法,目前我的gui没有出现 谢谢 package movieinfo; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java

目前我的代码不会运行,因为我没有main,但是当我创建main时,它必须是静态的,我的印象是,我不应该按照许多人的建议,将Swing元素的所有变量都设置为静态的。 我不知道如何在不使用main作为构造函数的情况下调用这些方法,目前我的gui没有出现

谢谢

 package movieinfo;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import org.apache.commons.io.FileUtils;

public class Swinggui {
    JButton enter;
    public JTextField movietext;

    JList listofmovies;// converts moviestowatch into gui
    // element.
    File textfilemovie; // file which movies marked for watching
    // are saved
    java.util.List<String> moviestowatch; // arraylist which is
    // populated by
    // textfilemovie
    // than printed to
    // GUI element
    ListSelectionListener setSearch;
    JButton add;
    String info;

    public Swinggui() throws IOException {
        yourMovies();
        gui();
        jsonAndButtons();

    }

    public void gui() {
        JFrame maingui = new JFrame("Gui");
        maingui.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.VERTICAL;
        enter = new JButton("Get Info");
        c.gridx = 2;
        c.gridy = 1;
        maingui.add(enter, c);
        add = new JButton("add");
        c.gridx = 5;
        c.gridy = 6;
        maingui.add(add, c);
        JTextArea movieinfo = new JTextArea(info, 5, 20);
        movieinfo.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2,
                Color.red));
        movietext = new JTextField(18);
        c.gridx = 1;
        c.gridy = 1;
        maingui.add(movietext, c);
        final JScrollPane scrolll = new JScrollPane(movieinfo);
        c.gridx = 1;
        c.gridy = 3;
        c.gridwidth = 2;
        maingui.add(scrolll, c);
        final JLabel titlee = new JLabel("Enter movie name below!");
        c.gridx = 1;
        c.gridy = 0;
        maingui.add(titlee, c);
        c.gridx = 1;
        c.gridy = 3;
        maingui.add(titlee, c);
        final JLabel watchlist = new JLabel("Watchlist");
        c.gridx = 5;
        c.gridy = 1;
        maingui.add(watchlist, c);
        maingui.setResizable(false);
        maingui.setVisible(true);
        listofmovies = new JList(moviestowatch.toArray());
        c.gridx = 4;
        c.gridy = 3;
        maingui.add(new JScrollPane(listofmovies), c);
        movieinfo.setLineWrap(true);
        movieinfo.setWrapStyleWord(true);
        movieinfo.setEditable(false);
        scrolll.getPreferredSize();
        listofmovies.addListSelectionListener(setSearch);
        maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        maingui.pack();

    }

    public void jsonAndButtons() {
        enter.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                System.out.println(apicall.getMovieInfo(movietext.getText()
                        .replaceAll(" ", "%20")));
                info = apicall.getMovieInfo(movietext.getText().replaceAll(" ",
                        "%20"));
            }

        });
        add.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                try {
                    FileUtils.writeStringToFile(new File(
                            org.apache.commons.io.FileUtils.getUserDirectory()
                                    + "/yourmovies.txt"),
                            "\n" + movietext.getText(), true);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    moviestowatch = FileUtils.readLines(textfilemovie);
                    listofmovies = new JList(moviestowatch.toArray());

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        });

    }

    public void yourMovies() throws IOException {
        textfilemovie = new File(
                org.apache.commons.io.FileUtils.getUserDirectory()
                        + "/yourmovies.txt");
        textfilemovie.createNewFile();
        moviestowatch = FileUtils.readLines(textfilemovie);
        setSearch = new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent arg0) {
                info = apicall.getMovieInfo(((String) listofmovies
                        .getSelectedValue()).replaceAll(" ", "%20"));
            }
        };
    }
}
packagemovieinfo;
导入java.awt.Color;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.File;
导入java.io.IOException;
导入javax.swing.BorderFactory;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JTextField;
导入javax.swing.event.ListSelectionEvent;
导入javax.swing.event.ListSelectionListener;
导入org.apache.commons.io.FileUtils;
公共类Swinggui{
按回车键;
公共JTextField movietext;
JList listofmovies;//将moviestowatch转换为gui
//元素。
File textfilemovie;//文件哪些电影被标记为观看
//得救
java.util.List moviestowatch;//arraylist
//居住
//文本文件电影
//而不是打印到
//GUI元素
ListSelectionListener设置搜索;
JButton-add;
字符串信息;
public Swinggui()引发IOException{
你的电影;
gui();
jsonAndButtons();
}
公共用户界面(){
JFrame maingui=新JFrame(“Gui”);
setLayout(新的GridBagLayout());
GridBagConstraints c=新的GridBagConstraints();
c、 填充=GridBagConstraints.VERTICAL;
输入=新建JButton(“获取信息”);
c、 gridx=2;
c、 gridy=1;
maingui.add(输入,c);
添加=新的JButton(“添加”);
c、 gridx=5;
c、 gridy=6;
maingui.add(add,c);
JTextArea movieinfo=新的JTextArea(info,5,20);
movieinfo.setboorder(BorderFactory.createMatteBorder(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,,
颜色(红色);
movietext=新的JTextField(18);
c、 gridx=1;
c、 gridy=1;
maingui.add(movietext,c);
最终JScrollPane scrolll=新JScrollPane(电影信息);
c、 gridx=1;
c、 gridy=3;
c、 网格宽度=2;
maingui.add(scrolll,c);
最终JLabel标题=新JLabel(“在下面输入电影名称!”);
c、 gridx=1;
c、 gridy=0;
maingui.add(titlee,c);
c、 gridx=1;
c、 gridy=3;
maingui.add(titlee,c);
最终JLabel观察列表=新JLabel(“观察列表”);
c、 gridx=5;
c、 gridy=1;
maingui.add(监视列表,c);
maingui.setresizeable(false);
maingui.setVisible(true);
listofmovies=newjlist(moviestWatch.toArray());
c、 gridx=4;
c、 gridy=3;
add(新的JScrollPane(listofmovies),c);
movieinfo.setLineWrap(true);
movieinfo.setWrapStyleWord(true);
movieinfo.setEditable(false);
scrolll.getPreferredSize();
添加ListSelectionListener(setSearch);
maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
maingui.pack();
}
public void jsonAndButtons(){
enter.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
System.out.println(apicall.getMovieInfo(movietext.getText())
.replaceAll(“,“%20”);
info=apicall.getMovieInfo(movietext.getText().replaceAll(“,
"%20"));
}
});
add.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
试一试{
FileUtils.writeStringToFile(新文件(
org.apache.commons.io.FileUtils.getUserDirectory()
+“/yourmovies.txt”),
“\n”+movietext.getText(),true);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
moviestowatch=FileUtils.readLines(textfilemovie);
listofmovies=newjlist(moviestWatch.toArray());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
});
}
public void yourMovies()引发IOException{
textfilemovie=新文件(
org.apache.commons.io.FileUtils.getUserDirectory()
+“/yourmovies.txt”);
textfilemovie.createNewFile();
moviestowatch=FileUtils.readLines(textfilemovie);
setSearch=新建ListSelectionListener(){
public void值已更改(ListSelectionEvent arg0){
info=apicall.getMovieInfo(((字符串)listofmovies
.getSelectedValue()).replaceAll(“,“%20”);
}
};
}
}
在主put中:

new Swinggui();

这将使您脱离静态上下文,进入非静态Swinggui构造函数。首先,不要将所有内容都保存在一个类中。创建一些其他类,然后创建该类型的对象,并调用其方法,在
main()
方法中如下所示:

 MyClass myClass = new MyClass();
 myClass.doStuff();

使您的类Swinggui扩展JFrame。 然后创建一个main方法并创建Swinggui的对象

Swinggui gui = new Swinggui();
现在,您必须使gui可见,以便进行此编写

gui.setVisible(true);
你可以走了

使用“this”引用代码中的所有内容,您将拥有非静态项。

“不使用main作为构造函数”-您打算如何使用
main
作为构造函数?@marounnaroun我想他是指