読者です 読者をやめる 読者になる 読者になる

マイペースなプログラミング日記

x86エミュレータやFPGA、WebGLにお熱なd-kamiがマイペースに書くブログ

WebGLを使わずにJavaScriptで3Dもどき その2

ボタンを押すと似非3Dが始まります

 

JavaのMapの初期化から要素代入を1行で書こうぜ

Java ネタ

何のために?と言われても理由なんてない。そこにはロマンしかない。Streamを使いたかっただけなんだよ!というわけでJava8なソースコード

Map<Integer, String> map = Stream.of(new Object[][]{{11, "大嶺"}, {12, "石川"}, {14, "大谷"}, {15, "関谷"}}).collect(Collectors.toMap(index -> (Integer)index[0], name -> (String)name[1]));

なお、匿名内部クラスとインスタンスイニシャライザを使ったほうがスマートな模様

Map<Integer, String> map = new HashMap<Integer, String>(){{put(11, "大嶺"); put(12, "石川"); put(14, "大谷"); put(15, "関谷");}};

メニューバーを使ってみる

Java JavaFX

ショートカットキー付きのメニューアイテムを持ったメニューバーを作ってみたテスト。

import javafx.stage.Stage;
import javafx.application.Application;

import javafx.scene.Scene;
import javafx.stage.FileChooser;

import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;

import java.io.File;

public class Test extends Application{
    public void start(final Stage stage){
        MenuBar menubar = new MenuBar();
        Menu fileMenu = new Menu("File(_F)");
        MenuItem openItem = new MenuItem("開く(_O)");
        openItem.setAccelerator(KeyCombination.valueOf("Shortcut+O"));
        
        openItem.setOnAction(event -> {
            FileChooser chooser = new FileChooser();
            File file = chooser.showOpenDialog(stage);
            
            if(file != null){
                System.out.println(file.getAbsolutePath());
            }
        });
        
        fileMenu.getItems().add(openItem);
        menubar.getMenus().add(fileMenu);
        
        stage.setScene(new Scene(menubar));
        stage.setWidth(300);
        stage.setHeight(200);
        stage.show();
    }
    
    public static void main(String... args) {
        launch(args);
    }
}

ショートカットキーの参考
qiita.com

ファイル選択ダイアログテスト

Java JavaFX

ファイル選択ダイアログ使うぞーっていうテスト

import javafx.stage.Stage;
import javafx.application.Application;

import javafx.scene.Scene;
import javafx.stage.FileChooser;
import javafx.scene.control.Button;

import java.io.File;

public class Test extends Application{
    public void start(final Stage stage){
        Button button = new Button("ファイル選択");
        
        button.setOnAction(event -> {
            FileChooser chooser = new FileChooser();
            File file = chooser.showOpenDialog(stage);
            
            if(file != null){
                System.out.println(file.getAbsolutePath());
            }
        });
        
        stage.setScene(new Scene(button));
        stage.setWidth(300);
        stage.setHeight(200);
        stage.show();
    }
    
    public static void main(String... args) {
        launch(args);
    }
}

ファイルのドラッグ&ドロップテスト

Java JavaFX

JavaFXでファイルをドラッグ&ドロップで受け取るためのテストプログラム

import javafx.stage.Stage;
import javafx.application.Application;

import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;

public class Test extends Application{
    public void start(Stage stage){
        Label label = new Label("DROP");
        
        label.setOnDragOver(event -> { 
            if(event.getDragboard().hasFiles()){
                event.acceptTransferModes(TransferMode.COPY);
            }
        });
        
        label.setOnDragDropped(event -> {
            Dragboard board = event.getDragboard();
            
            if(board.hasFiles()){
                board.getFiles().stream().forEach(file -> {
                    System.out.println(file.getName());
                });
                
                event.setDropCompleted(true);
            }else{
                event.setDropCompleted(false);
            }
        });
        
        stage.setScene(new Scene(label));
        stage.setWidth(300);
        stage.setHeight(200);
        stage.show();
    }
    
    public static void main(String... args) {
        launch(args);
    }
}

参考
m-miya.blog.jp
docs.oracle.com