好久没写东西了,毕竟一个屁民没那么多东西写的,来来回回就老三样,扯犊子的也不想写,今天给大家来个都感兴趣的-------如何编写自己的GUI工具?
当然了,IDEA怎么去破解,这里就不多比比,为什么用JAVA写,而不是用pyqt5写,那是因为pyqt5笔者也不是很会,而且相对于pyqt5,笔者这一次给大家看的要简单得多
有朋友可能要问,那我不会java或者是就只有一丢丢的java基础,我能写吗?
我的回答是,必须能
java特性是什么?
封装-继承-多态!
即使你不会java,只要会copy别人写好的核心就可以了,直接调用就行!
maven这个东西,大家暂时不用管他是啥,使用idea默认的就行,我们不创建javafx项目,直接用maven就行,这样的话我们缺少插件的话,直接用pom里添加会方便很多
不用git哈,大家不需要理会
在GuiDemo/src/main/java目录下新建javaclass项目
import javafx.application.Application;
import javafx.stage.Stage;public class GuiDemo extends Application { //创建一个GuiDemo类,GuiDemo继承Application类public void start(Stage GuiDemo) { //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性}public static void main(String args[]) {launch(args);}
}
从代码里我们可以看到,分别是GuiDemo类,start无返回的方法和main主方法;void就是不需要返回值,若是需要返回值需要给他一个返回值的类型,也就是String、Int等类型,并且需要一个return,这里不做过多介绍,后续会讲
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;public class GuiDemo extends Application { //创建一个GuiDemo类,GuiDemo继承Application类public void start(Stage GuiDemo) { //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性//设置titleGuiDemo.setTitle("GUI小DEMO by:vlan911 "); //设置小工具的标题GuiDemo.setMaxWidth(700); //设置小工具的最大宽度GuiDemo.setMaxHeight(500); //设置小工具的最大高度//添加一个pane,用来装填按钮等插件AnchorPane anchorPane = new AnchorPane(); //添加一个pane,用来装后面的小插件anchorPane.getChildren().addAll(); //调用getChildren方法的addAll方法,写死就行Scene scene = new Scene(anchorPane, 600, 700); //社子和Pane的默认宽度、高度,不能超过设置的窗口临界值GuiDemo.setScene(scene); //把窗口的属性填进去GuiDemo.show(); //显示窗口,否则运行的话是没有东西的}public static void main(String args[]) {launch(args);}
}
大家直接看注释就行,设置界面的临界值的好处就是,不管你用多大的显示器,我最大页面就这么点,不会出现小插件偏移、页面太难看的作用
我们Ctrl + Shift + F10 快捷键运行项目
现在是个白页,那是因为我们没有添加任何的文本框和按钮
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;public class GuiDemo extends Application { //创建一个GuiDemo类,GuiDemo继承Application类public void start(Stage GuiDemo) { //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性//设置titleGuiDemo.setTitle("GUI小DEMO by:vlan911 "); //设置小工具的标题GuiDemo.setMaxWidth(700); //设置小工具的最大宽度GuiDemo.setMaxHeight(500); //设置小工具的最大高度//设置iconGuiDemo.getIcons().add(new Image("22.jpg")); //设置GUI的小图标,图标需要放在classes目录下或是网上的在线图片//添加URL文字提示Label l = new Label("请输入URL"); //设置一个lable,用来显示提示文字l.setLayoutX(5); //设置lable的横坐标l.setLayoutY(10); //设置lable的纵坐标l.setPrefWidth(70); //设置lable的宽度l.setPrefHeight(20); //设置lable的高度//添加URL文本框TextArea textArea = new TextArea(); //添加一哥文本框,用来接收URLtextArea.setLayoutX(75); //设置文本框的横坐标textArea.setLayoutY(5); //设置文本框的纵坐标textArea.setPrefWidth(220); //设置文本框的宽度textArea.setPrefHeight(20); //设置文本框的高度//添加下拉按钮String strings[] = {"Kyan RCE", "Sapido RCE", "Vigor 2960 RCE"}; //添加一个字符串数组ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(strings)); //添加一个下拉列表,内容就是上面的字符串数组choiceBox.setLayoutX(315); //设置下拉列表的横坐标choiceBox.setLayoutY(10); //设置下拉列表的纵坐标choiceBox.setPrefHeight(20); //设置下拉列表的高度choiceBox.setPrefWidth(70); //设置下拉列表的宽度//添加确定按钮Button button = new Button("确定"); //添加一个按钮button.setLayoutX(405); //设置按钮的横坐标button.setLayoutY(10); //设置按钮的纵坐标button.setPrefHeight(20); //设置按钮的高度button.setPrefWidth(50); //设置按钮的宽度//添加一个pane,用来装填按钮等插件AnchorPane anchorPane = new AnchorPane(); //添加一个pane,用来装后面的小插件anchorPane.getChildren().addAll(textArea,choiceBox,button,l); //调用getChildren方法的addAll方法,写死就行,括号里的就是我们添加的插件名字Scene scene = new Scene(anchorPane, 600, 700); //社子和Pane的默认宽度、高度,不能超过设置的窗口临界值GuiDemo.setScene(scene); //把窗口的属性填进去GuiDemo.show(); //显示窗口,否则运行的话是没有东西的}public static void main(String args[]) {launch(args);}
}
我们在这里添加了一个lable,用来显示提示文字,一个用于接收URL地址的文本框,一个可供选择的下拉列表,以及一个确定按钮
光有接收,没有显示怎么能行?
我们再添加一个用于接收返回内容的文本框吧
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;public class GuiDemo extends Application { //创建一个GuiDemo类,GuiDemo继承Application类public void start(Stage GuiDemo) { //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性//设置titleGuiDemo.setTitle("GUI小DEMO by:vlan911 "); //设置小工具的标题GuiDemo.setMaxWidth(700); //设置小工具的最大宽度GuiDemo.setMaxHeight(500); //设置小工具的最大高度//设置iconGuiDemo.getIcons().add(new Image("22.jpg")); //设置GUI的小图标,图标需要放在classes目录下或是网上的在线图片//添加URL文字提示Label l = new Label("请输入URL"); //设置一个lable,用来显示提示文字l.setLayoutX(5); //设置lable的横坐标l.setLayoutY(10); //设置lable的纵坐标l.setPrefWidth(70); //设置lable的宽度l.setPrefHeight(20); //设置lable的高度//添加URL文本框TextArea textArea = new TextArea(); //添加一哥文本框,用来接收URLtextArea.setLayoutX(75); //设置文本框的横坐标textArea.setLayoutY(5); //设置文本框的纵坐标textArea.setPrefWidth(220); //设置文本框的宽度textArea.setPrefHeight(20); //设置文本框的高度//添加下拉按钮String strings[] = {"Kyan RCE", "Sapido RCE", "Vigor 2960 RCE"}; //添加一个字符串数组ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(strings)); //添加一个下拉列表,内容就是上面的字符串数组choiceBox.setLayoutX(315); //设置下拉列表的横坐标choiceBox.setLayoutY(10); //设置下拉列表的纵坐标choiceBox.setPrefHeight(20); //设置下拉列表的高度choiceBox.setPrefWidth(70); //设置下拉列表的宽度//添加确定按钮Button button = new Button("确定"); //添加一个按钮button.setLayoutX(405); //设置按钮的横坐标button.setLayoutY(10); //设置按钮的纵坐标button.setPrefHeight(20); //设置按钮的高度button.setPrefWidth(50); //设置按钮的宽度//添加回显文本框TextArea textArea1 = new TextArea(); //添加一个回显文本框textArea1.setLayoutX(5); //设置文本框的横坐标textArea1.setLayoutY(100); //设置文本框的纵坐标textArea1.setPrefHeight(300); //设置文本框的高度textArea1.setPrefWidth(500); //设置文本框的宽度textArea1.setWrapText(true); //设置文本框里的文字自动换行textArea1.setText("Kyan信息泄露漏洞\n" +"Kyan命令注入漏洞\n" +"Sapido命令执行漏洞\n" +"Vigor 2960命令执行\n" +"博华网龙RCE\n" +"西迪特WirelessRCE");//添加一个pane,用来装填按钮等插件AnchorPane anchorPane = new AnchorPane(); //添加一个pane,用来装后面的小插件anchorPane.getChildren().addAll(textArea, choiceBox, button, l,textArea1); //调用getChildren方法的addAll方法,写死就行,括号里的就是我们添加的插件名字Scene scene = new Scene(anchorPane, 600, 700); //社子和Pane的默认宽度、高度,不能超过设置的窗口临界值GuiDemo.setScene(scene); //把窗口的属性填进去GuiDemo.show(); //显示窗口,否则运行的话是没有东西的}public static void main(String args[]) {launch(args);}
}
我们添加了新的插件的时候,记得在下面的内容里加进去哦
anchorPane.getChildren().addAll(textArea, choiceBox, button, l,textArea1); //调用getChildren方法的addAll方法,写死就行,括号里的就是我们添加的插件名字
嘿嘿,这个时候有小伙子要问了,那我命令执行不能执行我想要的,那叫啥EXP?很好,我们接下来添加用于接收我们自定义命令的按钮和文本框吧
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;public class GuiDemo extends Application { //创建一个GuiDemo类,GuiDemo继承Application类public void start(Stage GuiDemo) { //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性//设置titleGuiDemo.setTitle("GUI小DEMO by:vlan911 "); //设置小工具的标题GuiDemo.setMaxWidth(700); //设置小工具的最大宽度GuiDemo.setMaxHeight(500); //设置小工具的最大高度//设置iconGuiDemo.getIcons().add(new Image("22.jpg")); //设置GUI的小图标,图标需要放在classes目录下或是网上的在线图片//添加URL文字提示Label l = new Label("请输入URL"); //设置一个lable,用来显示提示文字l.setLayoutX(5); //设置lable的横坐标l.setLayoutY(10); //设置lable的纵坐标l.setPrefWidth(70); //设置lable的宽度l.setPrefHeight(20); //设置lable的高度//添加URL文本框TextArea textArea = new TextArea(); //添加一哥文本框,用来接收URLtextArea.setLayoutX(75); //设置文本框的横坐标textArea.setLayoutY(5); //设置文本框的纵坐标textArea.setPrefWidth(220); //设置文本框的宽度textArea.setPrefHeight(20); //设置文本框的高度//添加下拉按钮String strings[] = {"Kyan RCE", "Sapido RCE", "Vigor 2960 RCE"}; //添加一个字符串数组ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(strings)); //添加一个下拉列表,内容就是上面的字符串数组choiceBox.setLayoutX(315); //设置下拉列表的横坐标choiceBox.setLayoutY(10); //设置下拉列表的纵坐标choiceBox.setPrefHeight(20); //设置下拉列表的高度choiceBox.setPrefWidth(70); //设置下拉列表的宽度//添加确定按钮Button button = new Button("确定"); //添加一个按钮button.setLayoutX(405); //设置按钮的横坐标button.setLayoutY(10); //设置按钮的纵坐标button.setPrefHeight(20); //设置按钮的高度button.setPrefWidth(50); //设置按钮的宽度//添加回显文本框TextArea textArea1 = new TextArea(); //添加一个回显文本框textArea1.setLayoutX(5); //设置文本框的横坐标textArea1.setLayoutY(100); //设置文本框的纵坐标textArea1.setPrefHeight(300); //设置文本框的高度textArea1.setPrefWidth(500); //设置文本框的宽度textArea1.setWrapText(true); //设置文本框里的文字自动换行textArea1.setText("Kyan信息泄露漏洞\n" +"Kyan命令注入漏洞\n" +"Sapido命令执行漏洞\n" +"Vigor 2960命令执行\n" +"博华网龙RCE\n" +"西迪特WirelessRCE");//添加执行命令文字提示Label l1 = new Label("请输入命令");l1.setLayoutX(5);l1.setLayoutY(62);l1.setPrefWidth(70);l1.setPrefHeight(20);//添加命令文本框TextArea textArea2 = new TextArea();textArea2.setLayoutX(75);textArea2.setLayoutY(55);textArea2.setPrefHeight(20);textArea2.setPrefWidth(220);//添加执行按钮Button button1 = new Button("执行");button1.setLayoutX(315);button1.setLayoutY(62);button1.setPrefHeight(20);button1.setPrefWidth(50);textArea2.setText("请输入命令...");//添加一个pane,用来装填按钮等插件AnchorPane anchorPane = new AnchorPane(); //添加一个pane,用来装后面的小插件anchorPane.getChildren().addAll(textArea, choiceBox, button, l, textArea1,textArea2,l1); //调用getChildren方法的addAll方法,写死就行,括号里的就是我们添加的插件名字Scene scene = new Scene(anchorPane, 600, 700); //社子和Pane的默认宽度、高度,不能超过设置的窗口临界值GuiDemo.setScene(scene); //把窗口的属性填进去GuiDemo.show(); //显示窗口,否则运行的话是没有东西的}public static void main(String args[]) {launch(args);}
}
此时我们还没有键入任何的事件,就是说,我们这个时候点击下拉框、按钮是没有认识事件的,关于事件,我们需要联动我们的具体请求
所以这节先不说,我们下期讲HTTP、HTTPS请求的时候一起弄,嘻嘻嘻
我们先给他编译成可以直接执行的jar包吧
我们这样封装,是百分百起不来的!
所以,我们重新写一个主main
public class router {public static void main(String[] args) {GuiDemo.main(args);}}
它的作用很简单,那就是我们进行打包的时候用
Ctrl+shift+Alt+S 添加打包的类
我们选择文件夹,这样的话就可以自定义选择项目
此时我们继续默认即可
点击OK后,我们点击build->Artifacts->build
我们返回我们的项目文件夹
D:\variablejava\GuiDemo\out\artifacts\GuiDemo_jar
需要注意的是,每个人的项目文件夹都是不一样的,同时我们需要关注我们的图标文件是不是在classes文件夹里,有很多次笔者都是因为图片没了所以项目起不来,报错
今天就先到这吧