3

Mac osx 10.6.8でnetbeans 7.3.1を使用しています

問題: 次のファイルをドロップすると:

照片.jpg
picture.jpg
blank space.txt

私は得る

not found %E7%85%A7%89%87.jpg
dropped picture.jpg
not found blank%20space.txt

と期待しながら

dropped 照片.jpg
dropped picture.jpg
dropped blank space.txt

質問: JavaFX に OS と同じ文字エンコーディングを使用するように依頼するにはどうすればよいですか?

別の質問: JavaFX と Mac OS X にデフォルトの文字エンコーディングとして UTF-8 を使用するように指示するにはどうすればよいですか?

回答: Petr の回答を参照してください。質問には回答していませんが、実際の問題を示しています。

コード:

import java.io.File;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SimpleDropFile extends Application {
    private VBox root = new VBox(10);

    @Override
    public void start(Stage primaryStage) {        
        Scene scene = new Scene(root, 300, 250);
        scene.setOnDragOver(onDragOver);
        scene.setOnDragDropped(onDragDropped);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    EventHandler onDragOver = new EventHandler<DragEvent>() {
        @Override
        public void handle(DragEvent event) {
            Dragboard db = event.getDragboard();
            if (db.hasFiles()) {
                event.acceptTransferModes(TransferMode.COPY);
            } else {
                event.consume();
            }
        }
    };

    EventHandler onDragDropped = new EventHandler<DragEvent>() {
        @Override
        public void handle(DragEvent event) {
            Dragboard db = event.getDragboard();
            boolean success = false;
            if (db.hasFiles()) {
                success = true;
                for (File file:db.getFiles()) {
                    if(file.exists()){
                        root.getChildren().add(new Label("dropped " + file.getName()));
                    } else {
                        root.getChildren().add(new Label("not found " + file.getName()));                        
                    }
                }
            }
            event.setDropCompleted(success);
            event.consume();
        }
    };

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

更新: 質問を更新して、次の内容を含めました。

  1. 適切な質問
  2. 最低限のサンプルコード。コピー、貼り付け、コンパイル、テストができるようになりました。おそらく、Windowsでは正常に動作します
  3. 答え
4

1 に答える 1

1

JavaFX のこのバグについて話していると思います: https://javafx-jira.kenai.com/browse/RT-23541

これは JavaFX 8 で修正されました。ここからアーリー アクセス リリースでテストできます: http://jdk8.java.net

于 2013-09-10T15:19:04.940 に答える