溫馨提示×

java fxml怎樣與REST API交互

小樊
97
2024-12-06 12:59:11
欄目: 編程語言

要在JavaFX中使用FXML與REST API進行交互,您可以遵循以下步驟:

  1. 添加依賴項 確保在項目的pom.xml文件中添加JavaFX和REST API客戶端(如Apache HttpClient)的依賴項。
<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>17.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
</dependencies>
  1. 創建FXML界面 創建一個FXML文件(例如:MyScene.fxml),并在其中添加所需的UI組件(如按鈕、文本框等)。

  2. 編寫控制器類 創建一個JavaFX控制器類(例如:MyController.java),并實現以下功能:

  • 加載FXML文件
  • 發送HTTP請求到REST API
  • 處理API響應并更新UI
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class MyController {

    @FXML
    private TextField apiUrlField;

    @FXML
    private Button fetchButton;

    @FXML
    private Label resultLabel;

    private CloseableHttpClient httpClient = HttpClients.createDefault();

    @FXML
    public void initialize() {
        fetchButton.setOnAction(event -> fetchData());
    }

    private void fetchData() {
        String apiUrl = apiUrlField.getText();
        if (apiUrl == null || apiUrl.isEmpty()) {
            resultLabel.setText("Please enter a valid API URL.");
            return;
        }

        HttpGet request = new HttpGet(apiUrl);
        try {
            HttpResponse response = httpClient.execute(request);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String result = EntityUtils.toString(entity);
                resultLabel.setText(result);
            } else {
                resultLabel.setText("Error: " + statusCode);
            }
        } catch (Exception e) {
            resultLabel.setText("Error: " + e.getMessage());
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 綁定控制器與FXML 在主應用程序類(例如:MainApp.java)中,將控制器與FXML文件關聯。
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("MyScene.fxml"));
        primaryStage.setTitle("JavaFX REST API Example");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

現在,當用戶在FXML界面中輸入API URL并點擊“Fetch”按鈕時,控制器將發送HTTP請求到REST API,并將響應結果顯示在界面上。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女