从文件中上载Java FX图像
我曾尝试使用file chooser在标签文本字段上创建一个图像图标,但当前代码适用于java,而不是java fx 如果有人知道如何修复我的代码,那将非常有帮助从文件中上载Java FX图像,java,javafx,netbeans,Java,Javafx,Netbeans,我曾尝试使用file chooser在标签文本字段上创建一个图像图标,但当前代码适用于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; impo
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);
}
}
这是JavaFX表单,当我单击picture时,它应该加载文件并另存为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");
}
}
JFileChooser和JOptionPane也是Swing,而不是JavaFX。如果你想让你的程序用JavaFX编写,就坚持使用JavaFX。使用
JavaFX.stage.FileChooser
和JavaFX.scene.control.Alert
,而不是等效的Swing API。由于这是JavaFX,您应该使用JavaFX.scene.image.image
/JavaFX.scene.image.ImageView
,而不是java.awt.image
/javax.swing.ImageIcon
。作为一般规则,避免混合UI工具包,除非您必须这样做。删除与AWT/Swing相关的所有内容,改用可用的JavaFXAPI,然后重试。如果您仍然有问题,请提供一个.并注意您将使用label.setGraphic(imageView)
向javafx.scene.control.label添加图像图形。我建议阅读一些关于JavaFX的教程;请查看java命名约定!我让代码正常工作了谢谢你的努力
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");
}
}