从文件中上载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

我曾尝试使用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;
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");

        }

    }