java - 从文件上传 Java FX 图像
问题描述
我正在尝试使用文件选择器在标签文本字段上创建图像图标,但当前代码适用于 java 而不是 java fx,如果有人知道修复我的代码,这将非常有帮助
package EmploymentPayroll;
import java.awt.Image;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.event.ActionEvent;
import javafx.scene.control.Label;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JOptionPane;
/**
* FXML Controller class
*
* @author Shafeen
*/
public class AddEmployeeController implements Initializable {
@FXML
private Label img;
private ImageIcon format = null;
String filename = null;
byte[] person_image = null;
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
private void UploadImageActionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f = chooser.getSelectedFile();
filename = f.getAbsolutePath();
*error* ImageIcon imageIcon = new ImageIcon(new ImageIcon(filename).getImage().getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_DEFAULT));
*error* img.setIcon(imageIcon);
try {
File image = new File(filename);
FileInputStream fis = new FileInputStream (image);
ByteArrayOutputStream bos= new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for(int readNum; (readNum=fis.read(buf))!=-1; ){
bos.write(buf,0,readNum);
}
person_image=bos.toByteArray();
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
这是 java fx 表单,当我单击图片时,它应该加载文件并保存为 BLOB 类型
错误一
错误二
感谢帮助
解决方案
如果有人希望使用 java fx 上传图像并以 blob 格式保存在数据库中,那么您可以参考此代码,谢谢
@FXML
private void UploadImageActionPerformed(ActionEvent event) {
FileChooser fileChooser = new FileChooser();
//Set extension filter
FileChooser.ExtensionFilter extFilterJPG
= new FileChooser.ExtensionFilter("JPG files (*.JPG)", "*.JPG");
FileChooser.ExtensionFilter extFilterjpg
= new FileChooser.ExtensionFilter("jpg files (*.jpg)", "*.jpg");
FileChooser.ExtensionFilter extFilterPNG
= new FileChooser.ExtensionFilter("PNG files (*.PNG)", "*.PNG");
FileChooser.ExtensionFilter extFilterpng
= new FileChooser.ExtensionFilter("png files (*.png)", "*.png");
fileChooser.getExtensionFilters()
.addAll(extFilterJPG, extFilterjpg, extFilterPNG, extFilterpng);
//Show open file dialog
File file = fileChooser.showOpenDialog(null);
try {
BufferedImage bufferedImage = ImageIO.read(file);
WritableImage image = SwingFXUtils.toFXImage(bufferedImage, null);
img.setImage(image);
img.setFitWidth(200);
img.setFitHeight(200);
img.scaleXProperty();
img.scaleYProperty();
img.setSmooth(true);
img.setCache(true);
FileInputStream fin = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int readNum; (readNum = fin.read(buf)) != -1;) {
bos.write(buf, 0, readNum);
}
person_image = bos.toByteArray();
} catch (IOException ex) {
Logger.getLogger("ss");
}
}
byte[] person_image = null;
@FXML
private void handleaddemployee(ActionEvent event) throws IOException {
try {
String empID = "nill";
if (!txtempID.getText().equals("")) {
empID = txtempID.getText();
}
Employee e = new Employee(
empID,
person_image
);
dbemployee.addEmployee(e);
} else {
System.out.println("not working");
}
} catch (SQLException ex) {
System.out.println("error");
} catch (NumberFormatException e) {
System.out.println("number error");
}
}
推荐阅读
- apache-spark-2.3 - 当左侧数据较大(~1B 记录)且具有幂律且右侧数据较小(但 > 2GB)时,我是否应该启用 shufflehashjoin
- git - 詹金斯管道 - 是否可以同时签出分支或标签
- laravel - Laravel 7-Carbon 以 UTC 的形式返回
- r - 如何提取每个日期时间戳的频率
- sql - 使用在另一个查询中返回多个的查询
- python - 库 Keras 和 Tensorflow 的退出代码 132
- android - Android Kotlin Retrofit,等待外挂响应
- c# - OnCollisionExit2D 在退出碰撞时未触发
- javascript - 我怎样才能将这个 Datatables 函数返回到 globale 函数中
- android - 如何使用 Mockito 模拟 Hawk 库?