diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc1ee5354106fde6ed245d0d70c25c7fc0192996
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa00ffab7828f4818589659c804ec2cfd99baed3
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7cf4e44a45e0af8d34de7a2ec8777718715eb41b
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000000000000000000000000000000000000..797acea53eb091cf5b30518802c3073f544adeed
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/design/Controller/CopyAction.java b/src/main/java/design/Controller/CopyAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..a08911cc7800fa00cf5150c5bc54bb5a7c2c93cc
--- /dev/null
+++ b/src/main/java/design/Controller/CopyAction.java
@@ -0,0 +1,30 @@
+package design.Controller;
+
+import design.pojo.ImageLabel;
+import javafx.scene.input.Clipboard;
+import javafx.scene.input.ClipboardContent;
+
+public class CopyAction {
+ public CopyAction () {
+ if(ImageLabel.getSelectedPictures().size()<=0) {
+ return;
+ }
+ if(ImageLabel.getCutedPictures().size() > 0) {
+ for(ImageLabel pNode : ImageLabel.getCutedPictures()) {
+ pNode.getImageView().setEffect(null);
+ }
+ ImageLabel.getCutedPictures().clear();
+ }
+ Clipboard clipboard = Clipboard.getSystemClipboard();
+ ClipboardContent clipboardContent = new ClipboardContent();
+ clipboard.clear();
+ for(ImageLabel pNode : ImageLabel.getSelectedPictures()) {
+ ImageLabel.getSelectedPictureFiles().add(pNode.getImageFile());
+ }
+ clipboardContent.putFiles(ImageLabel.getSelectedPictureFiles());
+ clipboard.setContent(clipboardContent);
+ clipboard = null;
+ clipboardContent = null;
+ }
+
+}
diff --git a/src/main/java/design/Controller/DeleteAction.java b/src/main/java/design/Controller/DeleteAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5ef15097d3719278433e4f5d7e9467f4e25575f
--- /dev/null
+++ b/src/main/java/design/Controller/DeleteAction.java
@@ -0,0 +1,34 @@
+package design.Controller;
+
+import design.ViewController.ImagePreviewViewController;
+import design.ViewController.fxmlTest;
+import design.pojo.ImageLabel;
+
+public class DeleteAction {
+ ImagePreviewViewController imagePreviewViewController;
+ public DeleteAction (ImagePreviewViewController imagePreviewViewController) {
+ this.imagePreviewViewController = imagePreviewViewController;
+
+ if(ImageLabel.getSelectedPictures().size()<=0) {
+ return;
+ }
+ if(ImageLabel.getCutedPictures().size() > 0) {
+ for(ImageLabel pNode : ImageLabel.getCutedPictures()) {
+ pNode.getImageView().setEffect(null);
+ }
+ ImageLabel.getCutedPictures().clear();
+ }
+
+ if(MyAlert.showAlert("是否删除选中的图片?", "", fxmlTest.mainStage)) {
+ for(ImageLabel pNode : ImageLabel.getSelectedPictures()) {
+ imagePreviewViewController.getImageLabelsPane().getChildren().remove(pNode);
+ pNode.getImageFile().delete();
+ }
+ ImageLabel.getSelectedPictureFiles().clear();
+
+ }else {
+ ImageLabel.getSelectedPictureFiles().clear();
+ }
+ ImageLabel.clearSelected();
+ }
+}
diff --git a/src/main/java/design/Controller/ImagePreviewController.java b/src/main/java/design/Controller/ImagePreviewController.java
index 78c81054737199f352ad072c9954fb663223ce82..bb88a0a1455955a00675344b8849abbf886c0003 100644
--- a/src/main/java/design/Controller/ImagePreviewController.java
+++ b/src/main/java/design/Controller/ImagePreviewController.java
@@ -25,6 +25,12 @@ import java.util.ArrayList;
*/
public class ImagePreviewController {
+ private ImagePreviewController imagePreviewController = this;
+
+ private FlowPane imageLabelsPane;
+
+ private TipsController tipsController;
+
private ObservableList imageLabels;
private String oldPath;
@@ -44,21 +50,24 @@ public class ImagePreviewController {
oldPath = "";
imageLabels = FXCollections.observableArrayList();
}
- public ImagePreviewController(MenuController menuController, ShowImageController showImageController){
+ public ImagePreviewController(MenuController menuController, ShowImageController showImageController, TipsController tipsController){
this();
this.menuController = menuController;
this.showImageController = showImageController;
+ this.tipsController = tipsController;
}
/**
* 读取选中目录下的所有图片文件 并存放在数组中 同时获取图片数量和总大小
* @param directoryFile 从TreeController中传入 选中目录的文件
*/
+ long size;
public void createImageViews(File directoryFile,FlowPane imageLabelsPane){
+ this.imageLabelsPane = imageLabelsPane;
// 清空图片列表
imageLabels.clear();
- imageLabelsPane.getChildren().clear();
+
imageCount = 0;
- long size = 0;
+ size = 0;
// 排除目录相同的情况 和 文件为空的情况
if(directoryFile == null || oldPath.equals(directoryFile.getPath())){
return;
@@ -79,7 +88,10 @@ public class ImagePreviewController {
// 将图片总大小格式化为 MB
imageTotalSize = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(1024*1024),4,RoundingMode.HALF_EVEN);
- imageLabelsPane.getChildren().addAll(imageLabels);
+ imageLabelsPane.getChildren().remove(0, imageLabelsPane.getChildren().size());
+ for(ImageLabel imagelabel : imageLabels){
+ imageLabelsPane.getChildren().add(imagelabel);
+ }
}
/**
* 创建一个装载图片的标签
@@ -90,7 +102,7 @@ public class ImagePreviewController {
Image image = new Image("file:" + file.getPath(),80,80,true,true);
ImageView imageView = new ImageView(image);
- ImageLabel imageLabel = new ImageLabel();
+ ImageLabel imageLabel = new ImageLabel(tipsController);
imageLabel.setText(file.getName());
imageLabel.setWrapText(true);
imageLabel.setTextOverrun(OverrunStyle.CENTER_ELLIPSIS);
@@ -99,16 +111,16 @@ public class ImagePreviewController {
imageLabel.setImageFileProperty(file);
imageLabel.setContentDisplay(ContentDisplay.TOP);
imageLabel.setPrefSize(120,120);
- imageLabel.setContextMenu(menuController.getImageControlMenu());
+ imageLabel.setContextMenu(menuController.getImageControlMenu(imagePreviewController));
imageLabel.setOnMouseClicked(event -> {
- if(event.getButton().equals(MouseButton.PRIMARY)){
- System.out.println("左键");
- imageLabel.setScaleX(3);
- imageLabel.setScaleY(3);
-
- }
+// if(event.getButton().equals(MouseButton.PRIMARY)){
+// System.out.println("左键");
+// imageLabel.setScaleX(3);
+// imageLabel.setScaleY(3);
+//
+// }
if(event.getButton().equals(MouseButton.SECONDARY)){
System.out.println("右键");
}
@@ -116,10 +128,12 @@ public class ImagePreviewController {
showImageController.createStage(presentFileList,imageLabel.getImageFileProperty());
}
});
- imageLabel.setOnMouseExited(event -> {
- imageLabel.setScaleX(1);
- imageLabel.setScaleY(1);
- });
+// imageLabel.setOnMouseExited(event -> {
+// imageLabel.setScaleX(1);
+// imageLabel.setScaleY(1);
+// });
+
+ imageLabel.addPictureNodeListener();
return imageLabel;
}
@@ -134,4 +148,19 @@ public class ImagePreviewController {
public BigDecimal getImageTotalSize() {
return imageTotalSize;
}
+
+ public String getOldPath() {
+ return oldPath;
+ }
+
+ public void refreshImageViews(File file) {
+ imageLabels.add(createImageLabel(file));
+ imageCount++;
+ size+=file.length();
+ imageTotalSize = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(1024*1024),4,RoundingMode.HALF_EVEN);
+ imageLabelsPane.getChildren().remove(0, imageLabelsPane.getChildren().size());
+ for(ImageLabel imagelabel : imageLabels){
+ imageLabelsPane.getChildren().add(imagelabel);
+ }
+ }
}
diff --git a/src/main/java/design/Controller/MenuController.java b/src/main/java/design/Controller/MenuController.java
index fb1a28291a23ea53c934a22b5e1356ec0d8e4e8b..93cb7a8772b9482b94426856eade7c6a7d4cfa5b 100644
--- a/src/main/java/design/Controller/MenuController.java
+++ b/src/main/java/design/Controller/MenuController.java
@@ -1,7 +1,14 @@
package design.Controller;
+import design.ViewController.ImagePreviewViewController;
+import design.pojo.ImageLabel;
+import javafx.scene.Node;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.FlowPane;
+import javafx.scene.text.Text;
/**
* User: 86176
@@ -11,21 +18,66 @@ import javafx.scene.control.MenuItem;
*/
public class MenuController {
+ private ImagePreviewViewController imagePreviewViewController;
+
+ private Node node;
+
+ private ImagePreviewController imagePreviewController;
+
private ContextMenu imageControlMenu;
private ContextMenu treeControlMenu;
+ public MenuController (Node node, ImagePreviewViewController imagePreviewViewController) {
+ this.imagePreviewViewController = imagePreviewViewController;
+ this.node = node;
+ }
+
/**
*
* @return 获取图片的右键菜单
*/
- public ContextMenu getImageControlMenu(){
+ public ContextMenu getImageControlMenu(ImagePreviewController imagePreviewController){
if(imageControlMenu == null){
MenuItem menuItem1 = new MenuItem("复制");
MenuItem menuItem2 = new MenuItem("粘贴");
MenuItem menuItem3 = new MenuItem("删除");
MenuItem menuItem4 = new MenuItem("重命名");
imageControlMenu = new ContextMenu(menuItem1,menuItem2,menuItem3,menuItem4);
+
+ menuItem1.setOnAction(e->{
+ new CopyAction();
+ });
+
+ menuItem2.setOnAction(e->{
+ new PasteAction(imagePreviewController);
+ });
+
+ menuItem3.setOnAction(e->{
+ new DeleteAction(imagePreviewViewController);
+ });
+
+ menuItem4.setOnAction(e->{
+
+ });
+
+ node.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> {
+ if (e.getButton() == MouseButton.SECONDARY)
+ imageControlMenu.show(node, e.getScreenX(), e.getScreenY());
+ else {
+ if (imageControlMenu.isShowing())
+ imageControlMenu.hide();
+ }
+ });
+
+ //点击空白处清空已选
+ node.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> {
+ Node clickNode = e.getPickResult().getIntersectedNode();
+ if (clickNode instanceof FlowPane && !(clickNode instanceof ImageLabel) && !(clickNode instanceof Text)) {// 鼠标点击非图片节点
+ ImageLabel.clearSelected();// 清空已选
+ }
+ });
+
}
return imageControlMenu;
}
diff --git a/src/main/java/design/Controller/MyAlert.java b/src/main/java/design/Controller/MyAlert.java
new file mode 100644
index 0000000000000000000000000000000000000000..19c3ffd7a1975cb1b762eecc2b1368b305e20404
--- /dev/null
+++ b/src/main/java/design/Controller/MyAlert.java
@@ -0,0 +1,30 @@
+package design.Controller;
+
+import javafx.scene.control.Alert;
+import javafx.scene.control.ButtonBar;
+import javafx.scene.control.ButtonType;
+import javafx.stage.Window;
+
+import java.util.Optional;
+
+public class MyAlert {
+ public static boolean showAlert(String p_header, String p_message, Window stage){
+
+ Alert alert = new Alert(Alert.AlertType.CONFIRMATION,p_message,new ButtonType("取消", ButtonBar.ButtonData.NO),
+ new ButtonType("确定", ButtonBar.ButtonData.YES));
+
+ alert.setTitle("注意窗口");
+ alert.setHeaderText(p_header);
+
+ alert.initOwner(stage);
+
+ Optional buttonType = alert.showAndWait();
+
+ if(buttonType.get().getButtonData().equals(ButtonBar.ButtonData.YES)){
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/design/Controller/PasteAction.java b/src/main/java/design/Controller/PasteAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..474fe65cff5f00cc14fee40f183de6dbdf9ad251
--- /dev/null
+++ b/src/main/java/design/Controller/PasteAction.java
@@ -0,0 +1,120 @@
+package design.Controller;
+
+import design.pojo.ImageLabel;
+import javafx.scene.input.Clipboard;
+import javafx.scene.input.DataFormat;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+
+public class PasteAction {
+ ImagePreviewController imagePreviewController;
+ public PasteAction (ImagePreviewController imagePreviewController) {
+ this.imagePreviewController = imagePreviewController;
+ Clipboard clipboard = Clipboard.getSystemClipboard();
+ List files = (List) (clipboard.getContent(DataFormat.FILES));
+ if (files.size() <= 0) {
+ return;
+ }
+ if (ImageLabel.getCutedPictures().size() > 0) {
+ File first = files.get(0);
+ if(first.getParentFile().getAbsolutePath().compareTo(imagePreviewController.getOldPath()) == 0){
+ for(ImageLabel pNode : ImageLabel.getCutedPictures()) {
+ pNode.getImageView().setEffect(null);
+ }
+ ImageLabel.clearSelected();
+ ImageLabel.getCutedPictures().clear();
+ ImageLabel.getSelectedPictureFiles().clear();
+ clipboard.clear();
+ return;
+ }
+ }
+ for(File oldFile : files) {
+ String newName = Pasterename(imagePreviewController.getOldPath(),oldFile.getName());
+ File newFile = new File(imagePreviewController.getOldPath()+File.separator+newName);
+ try {
+ newFile.createNewFile();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ if(newFile.exists()) {
+ try {
+ copyFile(oldFile,newFile);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ //该段代码应该把刚刚粘贴的图片加载到图片数组中,这样界面才能刷新显示出新加的图片
+// FileInputStream fis = new FileInputStream(newFile);
+// Image image = new Image(fis,100,100,true,true);
+// ImageView imageView = new ImageView(image);
+// ImageLabel I1 = new ImageLabel(newFile.getName(),imageView);
+// I1.setImageFileProperty(newFile);
+// mainUI.getPictures().add(I1);
+
+ imagePreviewController.refreshImageViews(newFile);
+
+
+ if(ImageLabel.getCutedPictures().size()>0) {
+ oldFile.delete();
+ }
+
+// imagePreviewViewController.showPicture();
+
+
+
+ }
+ clipboard.clear();
+ }
+ private void copyFile(File fromFile, File toFile) throws IOException {
+ FileInputStream inputStream = new FileInputStream(fromFile);
+ FileOutputStream outputStream = new FileOutputStream(toFile);
+ byte[] b = new byte[1024];
+ int byteRead;
+ while ((byteRead = inputStream.read(b)) > 0) {
+ outputStream.write(b, 0, byteRead);
+ }
+ inputStream.close();
+ outputStream.close();
+
+ }
+ private String Pasterename(String theFilePath, String name) {
+ String newName = name;
+ File fatherPathFile = new File(theFilePath);
+ File[] filesInFatherPath = fatherPathFile.listFiles();
+ for (File fileInFatherPath : filesInFatherPath) {
+ String fileName = fileInFatherPath.getName();
+ int cmp = newName.compareTo(fileName);
+ if (cmp == 0) {
+ String str = null;
+ int end = newName.lastIndexOf("."), start = newName.lastIndexOf("_副本");
+ if (start != -1) {
+ str = newName.substring(start, end);
+ int num = 1;
+ try {
+ num = Integer.parseInt(str.substring(str.lastIndexOf("_副本") + 3)) + 1;
+ int cnt = 0, d = num - 1;
+ while (d != 0) {
+ d /= 10;
+ cnt++;
+ }
+ newName = newName.substring(0, end - cnt) + num + newName.substring(end);
+ } catch (Exception e) {
+ newName = newName.substring(0, end) + "_副本1" + newName.substring(end);
+ }
+
+ } else {
+ newName = newName.substring(0, end) + "_副本1" + newName.substring(end);
+ }
+ }
+ }
+ return newName;
+ }
+}
diff --git a/src/main/java/design/Controller/TipsController.java b/src/main/java/design/Controller/TipsController.java
index fec8b71a8cb3c0194eeec11b765cce7c6cd655eb..eb2b8c015cd754d3b5707bb820d1045c92d94edb 100644
--- a/src/main/java/design/Controller/TipsController.java
+++ b/src/main/java/design/Controller/TipsController.java
@@ -12,6 +12,18 @@ public class TipsController {
private ImagePreviewController imageController;
+ private Label tipsLabel;
+
+ public void setImageController(ImagePreviewController imageController) {
+ this.imageController = imageController;
+ }
+
+ private int selectedCount = 0;
+
+ int imageCount;
+
+ double imageTotalSize;
+
public TipsController(){
}
@@ -20,13 +32,19 @@ public class TipsController {
}
public void createTipsLabel(Label tipsLabel){
- int imageCount = imageController.getImageCount();
- double imageTotalSize = imageController.getImageTotalSize().doubleValue();
+ this.tipsLabel = tipsLabel;
+ this.imageCount = imageController.getImageCount();
+ this.imageTotalSize = imageController.getImageTotalSize().doubleValue();
///
- int selectedCount = 0;
String text = " "+imageCount+"张图片("+imageTotalSize+"MB)---选中"+selectedCount+"张照片";
tipsLabel.setText(text);
tipsLabel.setStyle("-fx-background-color: pink");
}
+
+ public void setSelectedCount(int selectedCount) {
+ this.selectedCount = selectedCount;
+ String text = " "+imageCount+"张图片("+imageTotalSize+"MB)---选中"+this.selectedCount+"张照片";
+ tipsLabel.setText(text);
+ }
}
diff --git a/src/main/java/design/Controller/TreeController.java b/src/main/java/design/Controller/TreeController.java
index f9f1ddcc7fbf1516fdc5956ac7a27e523cd04700..a8ab53926822bbabf7f9cbc80bcfcce9ea3a1a5b 100644
--- a/src/main/java/design/Controller/TreeController.java
+++ b/src/main/java/design/Controller/TreeController.java
@@ -26,7 +26,7 @@ public class TreeController {
private TreeItem rootNode;
public TreeController(){
- rootNode = createTreeNode(new File("C:\\Program Files (x86)"));
+ rootNode = createTreeNode(new File("G:\\Program Files (x86)"));
}
public TreeController(MenuController menuController){
this();
diff --git a/src/main/java/design/ViewController/ImagePreviewViewController.java b/src/main/java/design/ViewController/ImagePreviewViewController.java
index 19d0855a795d8d6be6bf325818552ba4ca77b323..b4efc52373ed18c3d23d83f86521c8c8c75d85fc 100644
--- a/src/main/java/design/ViewController/ImagePreviewViewController.java
+++ b/src/main/java/design/ViewController/ImagePreviewViewController.java
@@ -19,6 +19,7 @@ import java.io.File;
* Description:
*/
public class ImagePreviewViewController {
+ private ImagePreviewViewController imagePreviewViewController = this;
private TreeController treeController;
private ImagePreviewController imageController;
private TipsController tipsController;
@@ -37,11 +38,12 @@ public class ImagePreviewViewController {
public ImagePreviewViewController(){
- menuController = new MenuController();
+ menuController = new MenuController(imageLabelsPane,imagePreviewViewController);
treeController = new TreeController(menuController);
showImageController = new ShowImageController();
- imageController = new ImagePreviewController(menuController, showImageController);
- tipsController = new TipsController(imageController);
+ tipsController = new TipsController();
+ imageController = new ImagePreviewController(menuController, showImageController, tipsController);
+ tipsController.setImageController(imageController);
}
public void initialize(){
@@ -70,4 +72,8 @@ public class ImagePreviewViewController {
});
}
+
+ public FlowPane getImageLabelsPane() {
+ return imageLabelsPane;
+ }
}
diff --git a/src/main/java/design/ViewController/fxmlTest.java b/src/main/java/design/ViewController/fxmlTest.java
index 8c8f54f22d26eea9ee9761d00d2d956ff8b56f93..9c3d89d7776bd2fc5a4cd93dac5feb8e1fc4ef87 100644
--- a/src/main/java/design/ViewController/fxmlTest.java
+++ b/src/main/java/design/ViewController/fxmlTest.java
@@ -5,6 +5,7 @@ import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
+import javafx.stage.Window;
import java.net.URL;
@@ -15,6 +16,8 @@ import java.net.URL;
* Description:
*/
public class fxmlTest extends Application {
+
+ public static Window mainStage;
public static void main(String[] args) {
launch(args);
}
diff --git a/src/main/java/design/pojo/ImageLabel.java b/src/main/java/design/pojo/ImageLabel.java
index 28e19e08b842ccf1c36c15257359b644fa5400cf..c45d4d9157deb205350101d04c3936dd46a751e0 100644
--- a/src/main/java/design/pojo/ImageLabel.java
+++ b/src/main/java/design/pojo/ImageLabel.java
@@ -1,11 +1,19 @@
package design.pojo;
+import design.Controller.TipsController;
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Node;
import javafx.scene.control.Label;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.MouseEvent;
import java.io.File;
+import java.util.ArrayList;
/**
* User: 86176
@@ -19,6 +27,23 @@ public class ImageLabel extends Label {
// 是否被选中 默认没被选中
private boolean isSelected;
+ private ImageLabel imageLabel = this;
+
+ public BooleanProperty selected = new SimpleBooleanProperty();
+
+ protected static ArrayList selectedPictures = new ArrayList<>();
+ protected static ArrayList cutedPictures = new ArrayList<>();
+ protected static ArrayList selectedPictureFiles = new ArrayList<>();
+ //
+ private TipsController tipsController;
+
+
+
+
+ public ImageLabel(TipsController tipsController) {
+ this.tipsController = tipsController;
+ }
+
public ImageLabel(){
}
@@ -49,7 +74,66 @@ public class ImageLabel extends Label {
return isSelected;
}
- public void setSelected(boolean selected) {
- isSelected = selected;
+// public void setSelected(boolean selected) {
+// isSelected = selected;
+// }
+
+ public void setSelected(boolean value) {
+ boolean istrue = selected.get();
+ selected.set(value);
+ if (selected.get() && !istrue)
+ selectedPictures.add(this);
+ else if (istrue && !selected.get())
+ selectedPictures.remove(this);
+ System.out.println(selectedPictures.size());
+ tipsController.setSelectedCount(selectedPictures.size());
+ }
+
+ public static void clearSelected() {
+ for (ImageLabel pNode : selectedPictures) {
+ pNode.selected.set(false);
+ }
+ selectedPictures.removeAll(selectedPictures);
}
+
+ public void addPictureNodeListener() {
+ selected.addListener(new InvalidationListener() {
+ @Override
+ public void invalidated(Observable observable) {
+ if(selected.get()) {
+ imageLabel.setStyle("-fx-background-color:#a7a7a7;");
+ }else {
+ imageLabel.setStyle("-fx-background-color:transparent;");
+ }
+ }
+ });
+ this.setOnMouseEntered((MouseEvent e) -> {
+ if (!selected.get())
+ this.setStyle("-fx-background-color:linear-gradient(to bottom,#3e4147 1%, #a7a7a7 98%);");
+
+ });
+ this.setOnMouseExited((MouseEvent e) -> {
+ if (!selected.get())
+ this.setStyle("-fx-background-color:transparent;");
+
+ });
+ this.addEventHandler(MouseEvent.MOUSE_CLICKED, new MouseEvenHandler(this));
+ }
+
+ public static ArrayList getSelectedPictures() {return selectedPictures;}
+
+ public static ArrayList getCutedPictures() {return cutedPictures;}
+
+ public ImageView getImageView (){
+ return (ImageView) this.getGraphic();
+ }
+
+ public static ArrayList getSelectedPictureFiles() {
+ return selectedPictureFiles;
+ }
+
+ public File getImageFile() {
+ return this.imageFileProperty.get();
+ }
+
}
diff --git a/src/main/java/design/pojo/MouseEvenHandler.java b/src/main/java/design/pojo/MouseEvenHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bb29446953e6f97633935a9986c65d79c6918ba
--- /dev/null
+++ b/src/main/java/design/pojo/MouseEvenHandler.java
@@ -0,0 +1,27 @@
+package design.pojo;
+
+import javafx.event.EventHandler;
+import javafx.scene.Node;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+
+public class MouseEvenHandler implements EventHandler {
+ Node node;
+ public MouseEvenHandler(Node node){
+ this.node = node;
+ }
+
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ if(node instanceof ImageLabel) {
+ if(mouseEvent.isControlDown() == false) {//Control没有按下
+ if(mouseEvent.getButton()!= MouseButton.SECONDARY || !((ImageLabel)node).selected.getValue())
+ ImageLabel.clearSelected();
+ ((ImageLabel)node).setSelected(true);
+ }
+ if(mouseEvent.isControlDown() && mouseEvent.getButton() == MouseButton.PRIMARY) {//Control按下
+ ((ImageLabel) node).setSelected( !((ImageLabel)node).selected.get() );
+ }
+ }
+ }
+}