---
# System prepended metadata

title: JavaFxTools
tags: [tirc-library]

---

---
tags: tirc-library
---

# JavaFxTools

專案內包含以JavaFx為基礎開發的UI元件

### maven
```xml=
<dependency>
  <groupId>tirc.lib.ui</groupId>
  <artifactId>JavaFxTools</artifactId>
  <version>0.0.4</version>
</dependency>
```

## MultiPicCanvas
此元件提供以行列方式放置多張圖片，
並依據Canvas大小自動縮放的功能。

### 使用範例碼
```java=
public class DemoController {	
	
    @FXML private Pane canvas_parent_pane;
	
    @FXML public void initialize() {
	canvas_parent_pane.getChildren().add(initMultiPictureCanvas());
    }
	
    private MultiPicCanvas initMultiPictureCanvas() {		
        int pic_actual_width = 643;
        int pic_actual_height = 485;
        int rows = 7;
        int cols = 7;
        Image image = new Image("TestPicture.jpg");	
	
        MultiPicCanvas multi_picture_canvas 
            = new MultiPicCanvas(
                rows,
                cols, 
                pic_actual_width,    // 圖片實際寬度
                pic_actual_height);  // 圖片實際高度
                
        // 圖片間間隔距離
        multi_picture_canvas.setSpace(10); 
	
        // 依照row與col的序號來設定圖片
        for(int row = 0; row < rows; row++) {
            for(int col = 0;col < cols; col++) {
                multi_picture_canvas.setImage(row, col, image);
            }
        }
    
        // 監聽點擊事件    
        multi_picture_canvas.setListener((row, col)->{
            System.out.println(String.format("onClick row:%d col:%d", row, col));
        });
    
        // 針對父元件進行保持比例自動縮放功能
        multi_picture_canvas.bindParentSize(canvas_parent_pane); 
		
        return multi_picture_canvas;
    }
}
```

## MultiPicControl
此元件以MultiPicCanvas為主體，
再加入疊上文字功能，
可傳入JavaFx text元件。
```java=
public class DemoController {	
	
    @FXML private Pane canvas_parent_pane;
	
    @FXML public void initialize() {
        canvas_parent_pane.getChildren().add(initMultiPictureCanvas());
    }
	
    private Control initMultiPictureCanvas() {		
        int pic_actual_width = 643;
        int pic_actual_height = 485;
        int rows = 7;
        int cols = 7;
        Image image = new Image("TestPicture.jpg");
		
        MultiPicControl control = new MultiPicControl();
		
        // 初始化MultiPicCanvas
        control.initCanvas(
            rows, 
            cols, 
            pic_actual_width,    // 圖片實際寬度
            pic_actual_height);  // 圖片實際高度
        
        // 圖片間間隔距離
        control.setSpace(10);

        // 依照row與col的序號來設定圖片
        for(int row = 0; row < rows; row++) {
            for(int col = 0;col < cols; col++) {
                control.setImage(row, col, image);
            }    
        }
        
        // 監聽點擊事件   
        control.setListener((row, col)->{
            System.out.println(String.format("onClick row:%d col:%d", row, col));
        });

        // 針對父元件進行保持比例自動縮放功能
        control.bindParentSize(canvas_parent_pane); //輸入其父元件
		
        // 文字功能
        for(int row = 0; row < rows; row++) {
            for(int col = 0;col < cols; col++) {
                Text t = new Text();
                t.setText("Hello " + row + "," + col);
                t.setFill(Color.WHITE);
                control.setText(row, col, t);
            }
        }
        
        // 修改文字內容
        control.setText(3, 3, "YA");
		
        // 設定文字距離邊框距離
        control.setTextPadding(5);
        // 設定文字對齊
        control.setTextAlign(HPos.RIGHT, VPos.BOTTOM);
		
        return control;
    }
}
```

# Release Note #
### v0.1 release date: 未定 ###
* 加入MultiPicCanvas元件
* 加入使用Bind為基礎的I18N元件
* 加入MultiPicControl元件，可支援輸入JavaFx Text物件