美文网首页
JavaFx,Java桌面程序初体验

JavaFx,Java桌面程序初体验

作者: Ktry | 来源:发表于2020-06-02 12:41 被阅读0次

    为了方便的做接口测试,无聊做了个接口测试的工具,下面是一些截图

    QQ截图20200602123330.png QQ截图20200602123522.png

    代码实现

    • 导入依赖
    commons-logging-1.2.jar
    fastjson-1.2.6.jar
    httpclient-4.5.jar
    httpcore-4.4.4.jar
    httpmime-4.5.jar
    
    • MySceneController.fxml布局
    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.control.ListView?>
    <?import javafx.scene.control.RadioButton?>
    <?import javafx.scene.control.Slider?>
    <?import javafx.scene.control.TextArea?>
    <?import javafx.scene.control.TextField?>
    <?import javafx.scene.control.ToggleGroup?>
    <?import javafx.scene.layout.AnchorPane?>
    <?import javafx.scene.text.Text?>
    
    <?import javafx.scene.control.TableView?>
    <?import javafx.scene.control.TableColumn?>
    <?import javafx.scene.layout.VBox?>
    <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MySceneController">
       <children>
          <Button fx:id="oneB" layoutX="684.0" layoutY="45.0" mnemonicParsing="false" onAction="#one" prefHeight="23.0" prefWidth="62.0" text="Send" />
          <TextField fx:id="ed" layoutX="374.0" layoutY="45.0" minWidth="300.0" promptText="需要http(s)://" />
          <TextArea fx:id="te" layoutX="547.0" layoutY="147.0" prefHeight="612.0" prefWidth="612.0" />
    
          <fx:define><ToggleGroup fx:id="tgType" /></fx:define>
          <RadioButton fx:id="getRadio" layoutX="402.0" layoutY="92.0" mnemonicParsing="false" selected="true"  toggleGroup="$tgType" text="GET"></RadioButton>
          <RadioButton fx:id="postRadio" layoutX="482.0" layoutY="92.0" mnemonicParsing="false" text="POST" toggleGroup="$tgType" />
          <RadioButton fx:id="putRadio" layoutX="571.0" layoutY="92.0" mnemonicParsing="false" text="PUT" toggleGroup="$tgType" />
          <RadioButton fx:id="deleteRadio" layoutX="657.0" layoutY="92.0" mnemonicParsing="false" text="DELETE" toggleGroup="$tgType" />
    
          <!--<Label fx:id="mess" layoutX="451.0" layoutY="116.0" text="请求次数" />-->
          <Text layoutX="350.0" layoutY="61.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Url" />
          <!--<Slider layoutX="522.0" layoutY="117.0" min="1.0" value="1.0" />-->
          <!--<Label layoutX="672.0" layoutY="116.0" text="1次" />-->
          <!--<Label layoutX="672.0" layoutY="116.0" text="1次" />-->
          <VBox fx:id="vbo" style="-fx-background-color: ivory" layoutX="27.0" layoutY="150.0" prefHeight="554.0" prefWidth="500.0" />
          <TextField fx:id="addkey" layoutX="103.0" layoutY="729.0" prefHeight="23.0" prefWidth="127.0" promptText="Key" />
          <Text layoutX="47.0" layoutY="745.0" strokeType="OUTSIDE" strokeWidth="0.0" text="添加" wrappingWidth="55.000001192092896" />
          <TextField fx:id="addvalue" layoutX="237.0" layoutY="729.0" promptText="Value" />
          <Button onAction="#sub" layoutX="412.0" layoutY="729.0" mnemonicParsing="false" text="确定" />
       </children>
    </AnchorPane>
    
    ``
    - MySceneController
    ```java
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.fxml.FXML;
    import javafx.scene.control.*;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.VBox;
    import org.apache.http.HttpEntity;
    import org.apache.http.client.methods.*;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import java.io.IOException;
    import java.util.*;
    
    public class MySceneController {
    
    
        @FXML
        private Button oneB;
    
        @FXML
        private TextField ed;
    
        @FXML
        private TextArea te;
    
        @FXML
        private RadioButton getRadio;
    
        @FXML
        private ToggleGroup tgType;
    
        @FXML
        private RadioButton postRadio;
    
        @FXML
        private RadioButton putRadio;
    
        @FXML
        private RadioButton deleteRadio;
    
    
        @FXML
        private VBox vbo;
    
        @FXML
        ToggleGroup t = new ToggleGroup();
    
        LinkedHashMap<String,String[]> map = new LinkedHashMap<>();
    
        SplitPane getP(String i,String k,String v){
            SplitPane p = new SplitPane();
            p.setDividerPositions(0.5);
            p.setPrefHeight(48.0);
            p.setPrefWidth(500.0);
    
            Label l = new Label(k+"   =    "+v);
            l.setPrefHeight(15.0);
            l.setPrefWidth(457.0);
    
            Button b = new Button("删除");
            b.setOnMouseClicked(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    System.out.println(i);
    
                    remo(i);
                }
            });
            b.setMnemonicParsing(false);
            p.getItems().addAll(l,b);
            return p;
        }
    
    
    
    
        void sx(){
            vbo.getChildren().clear();
            vbo.setSpacing(5);
            Set<String> keys = map.keySet();   //此行可省略,直接将map.keySet()写在for-each循环的条件中
            for(String key:keys){
                vbo.getChildren().addAll(getP(map.get(key)[0],map.get(key)[1],map.get(key)[2]));
            }
        }
    
    
    
        void remo(String i){
            map.remove(i);
            sx();
        }
    
    
    
    
        int i = 1;
        @FXML
        void one(ActionEvent event) {
            String type = "GET";
            if (getRadio.selectedProperty().getValue()){
                te.setText(prettyJson(httpGet(ed.getText())));
            }
            if (postRadio.selectedProperty().getValue()){
                Set<String> keys = map.keySet();   //此行可省略,直接将map.keySet()写在for-each循环的条件中
                LinkedHashMap<String,String> map1 = new LinkedHashMap<>();
                for(String key:keys){
                    map1.put(map.get(key)[1],map.get(key)[2]);
                }
                te.setText(prettyJson(httpPost(ed.getText(),map1)));
            }
            if (putRadio.selectedProperty().getValue()){
                Set<String> keys = map.keySet();   //此行可省略,直接将map.keySet()写在for-each循环的条件中
                LinkedHashMap<String,String> map1 = new LinkedHashMap<>();
                for(String key:keys){
                    map1.put(map.get(key)[1],map.get(key)[2]);
                }
                te.setText(prettyJson(httpPut(ed.getText(),map1)));
            }
            if (deleteRadio.selectedProperty().getValue()){
                te.setText(prettyJson(httpDelete(ed.getText())));
            }
    
    
    
        }
    
    
    
        @FXML
        private TextField addkey;
    
        @FXML
        private TextField addvalue;
        @FXML
        void sub(ActionEvent event) {
            if(addkey.getText().equals("")||addvalue.getText().equals("")){}else {
                int i = new Random().nextInt(10000000) + 1;
                String[] lu = new String[3];
                lu[0]=i+"";
                lu[1]=addkey.getText();
                lu[2]=addvalue.getText();
                map.put(i + "", lu);
                addkey.setText("");
                addvalue.setText("");
                sx();
            }
        }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        private String prettyJson(String json) {
            JSONObject jsonObject = null;
            try {
                jsonObject = JSONObject.parseObject(json);
            } catch (Exception e) {
                return json;
            }
            return JSONObject.toJSONString(jsonObject, true);
        }
    
        static String httpPut(String url, Map map){
            String encode = "utf-8";
            CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
            HttpPut httpput = new HttpPut(url);
            httpput.setHeader("Accept","*/*");
            httpput.setHeader("Accept-Encoding","gzip, deflate");
            httpput.setHeader("Cache-Control","no-cache");
            httpput.setHeader("Connection", "keep-alive");
            httpput.setHeader("Content-Type", "application/json;charset=UTF-8");
            StringEntity stringEntity = new StringEntity(JSON.toJSONString(map), encode);
            httpput.setEntity(stringEntity);
            String content = null;
            CloseableHttpResponse httpResponse = null;
            try {
                //响应信息
                httpResponse = closeableHttpClient.execute(httpput);
                HttpEntity entity = httpResponse.getEntity();
                content = EntityUtils.toString(entity, encode);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                closeableHttpClient.close();  //关闭连接、释放资源
            } catch (IOException e) {
                e.printStackTrace();
            }
            return content;
        }
        static String httpPost(String url,Map map){
            // 返回body
            String body = null;
            // 获取连接客户端工具
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse httpResponse=null;
            // 2、创建一个HttpPost请求
            HttpPost post = new HttpPost(url);
            // 5、设置header信息
            /**header中通用属性*/
            post.setHeader("Accept","*/*");
            post.setHeader("Accept-Encoding","gzip, deflate");
            post.setHeader("Cache-Control","no-cache");
            post.setHeader("Connection", "keep-alive");
            post.setHeader("Content-Type", "application/json;charset=UTF-8");
    
    
    
            // 设置参数
            if (map != null) {
    
                //System.out.println(JSON.toJSONString(map));
                try {
                    StringEntity entity1=new StringEntity(JSON.toJSONString(map),"UTF-8");
                    entity1.setContentEncoding("UTF-8");
                    entity1.setContentType("application/json");
                    post.setEntity(entity1);
    
                    // 7、执行post请求操作,并拿到结果
                    httpResponse = httpClient.execute(post);
                    // 获取结果实体
                    HttpEntity entity = httpResponse.getEntity();
                    if (entity != null) {
                        // 按指定编码转换结果实体为String类型
                        body = EntityUtils.toString(entity, "UTF-8");
                    }
                    try {
                        httpResponse.close();
                        httpClient.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return body;
        }
        static String httpGet(String url){
            // 获取连接客户端工具
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse httpResponse=null;
            String finalString = null;
            HttpGet httpGet = new HttpGet(url);
            /**公共参数添加至httpGet*/
    /**header中通用属性*/
            httpGet.setHeader("Accept","*/*");
            httpGet.setHeader("Accept-Encoding","gzip, deflate");
            httpGet.setHeader("Cache-Control","no-cache");
            httpGet.setHeader("Connection", "keep-alive");
            httpGet.setHeader("Content-Type", "application/json;charset=UTF-8");
    
            try {
                httpResponse = httpClient.execute(httpGet);
                HttpEntity entity = httpResponse.getEntity();
                finalString= EntityUtils.toString(entity, "UTF-8");
                try {
                    httpResponse.close();
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return finalString;
        }
    
        public static String httpDelete(String url){
    
            //HttpResponse response = new HttpResponse();
    
            String encode = "utf-8";
    
            String content = null;
            //since 4.3 不再使用 DefaultHttpClient
            CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
            HttpDelete httpdelete = new HttpDelete(url);
            // 5、设置header信息
    
    /**header中通用属性*/
            httpdelete.setHeader("Accept","*/*");
            httpdelete.setHeader("Accept-Encoding","gzip, deflate");
            httpdelete.setHeader("Cache-Control","no-cache");
            httpdelete.setHeader("Connection", "keep-alive");
            httpdelete.setHeader("Content-Type", "application/json;charset=UTF-8");
    
    
            CloseableHttpResponse httpResponse = null;
            try {
                httpResponse = closeableHttpClient.execute(httpdelete);
                HttpEntity entity = httpResponse.getEntity();
                content = EntityUtils.toString(entity, encode);
    
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {   //关闭连接、释放资源
                closeableHttpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return content;
        }
    
    }
    
    
    • Main
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    /**
     * @ClassName: Main
     * @Auyher: WUX
     * @Date: 2020/5/18 13:34
     */
    public class Main extends Application {
        static private Stage primaryStage;
    
    //stack.getChildren().add(new Button("test")) ;
        @Override
        public void start(Stage primaryStage) throws Exception {
            this.primaryStage = primaryStage;
            Parent root = FXMLLoader.load(getClass().getResource("MySceneController.fxml"));
            primaryStage.setTitle("接口测试工具v1.0     QQ:724930341  欢迎指导");
            primaryStage.setScene(new Scene(root, 1200, 800));
            primaryStage.setResizable(false);//禁止缩放
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:JavaFx,Java桌面程序初体验

          本文链接:https://www.haomeiwen.com/subject/ighuzhtx.html