# FilePicker

> 预留组件——2026 API 中的空骨架，目前不会产生任何结果，仅占位。

Source: https://crossfly.dev/zh/docs/ui/widgets/filepicker — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# FilePicker

> 🔴 · **包：** `dev.crossfly.ui.picker` · **继承：** `Picker` · **状态：预留（不可用）**

`FilePicker` 在 2026 API 中处于**预留**状态：在当前代码中它只是一个空骨架 ——

```java
public class FilePicker extends Picker {}
```

—— 没有构造函数、字段、布局或自己的 `getAnswer()`。它**继承了基类的 `getAnswer()`**（[`Picker`](/docs/ui/widgets/picker)），该方法返回 `null`；因此它**不产生任何结果**，不应被使用。

## 完整示例（复制、粘贴并运行）
`FilePicker` 处于**预留**状态，不产生结果（继承基类的 `getAnswer()`，返回 `null`）。下面的示例是可执行的，并**诚实地**演示了这一限制：它显示 picker，收集 `getAnswer()`，并报告返回值为 `null`。要真正选择媒体，旁边的按钮使用可用的替代方案 [`PhotoPicker`](/docs/ui/widgets/photopicker)。

```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.picker.*;

/** 可执行的主界面。将 launcher 指向此类（classname）并运行：gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label saida = new Label("Resultado: —");
      add(LAY_AUTO, saida);

      // FilePicker 是一个预留的骨架：getAnswer() 始终返回 null。
      Button tentarFilePicker = new Button("Tentar FilePicker (reservado)")
         .onAction(c ->
         {
            FilePicker fp = new FilePicker();
            fp.show(answer ->
               saida.setText("FilePicker devolveu: " + answer + " (reservado, sem resultado)"));
         });
      add(LAY_AUTO, tentarFilePicker);

      // 捕获媒体的真实替代方案：PhotoPicker。
      Button usarPhotoPicker = new Button("Alternativa: PhotoPicker")
         .onAction(c ->
         {
            PhotoPicker pp = new PhotoPicker(PhotoPicker.Preview.PHOTO);
            pp.show(answer ->
            {
               String caminho = (String) answer;
               if (pp.isError())
                  saida.setText("Erro de câmera: " + caminho);
               else
                  saida.setText("Foto salva em: " + caminho);
            });
         });
      add(LAY_AUTO, usarPhotoPicker);
   }
}
```

> 下面的片段只展示**核心部分**（放入 `onShow()` 内的内容）。要运行它们，请将其放入上面的 `MainWindow` 骨架中。

## 预期目标
浏览文件系统并返回所选文件/文件夹的路径。源码中的注释表明其意图是从基于 root 的惰性树选择器迁移过来 —— 但这**尚未移植**。

## 不存在的内容（不要将其记录为可用）
先前的实现（使用 `Tree`/`TreeModel` 的惰性树、图片预览、通过 `Dropdown` 的卷、多选）**已被移除**，这与现代化改造中移除 `ui/tree` 模块相一致。旧的 API —— `Filter`、`initialPath`、`multipleSelection`、`mountTree`、`getTree` 等 —— **均已不存在**。

## 预留期间的替代方案
- 要从相机捕获媒体，请使用 [`PhotoPicker`](/docs/ui/widgets/photopicker)。
- 要选择颜色/日期/时间，请使用相应的专用 picker。
- 在代码充实之前，请将 `FilePicker` 视为不可用。

## 另请参阅
- 领域指南：[`ui/`](/docs/ui) · 食谱：[`cookbook/`](/docs/cookbook)
- 模式基础：[`Picker`](/docs/ui/widgets/picker)
