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

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

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

何のために?と言われても理由なんてない。そこにはロマンしかない。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, "関谷");}};

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

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

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

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

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

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);
    }
}

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

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

JavaFX始めました

まずは簡単なやつを…

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class Test extends Application{
    @Override
    public void start(Stage stage){
        stage.setTitle("Hello JavaFX");
        stage.setWidth(400);
        stage.setHeight(240);
        
        Label message = new Label("Hello JavaFX");
        message.setFont(new Font(60));
        stage.setScene(new Scene(message));
        stage.show();
    }
}