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