gpt4 book ai didi

java - 在 jfilechooser 中包含图像缩略图

转载 作者:行者123 更新时间:2023-11-30 06:02:44 25 4
gpt4 key购买 nike

我有一个 jfilechooser,可以帮助搜索和选择图像以上传到项目数据库中。还有一个缩略图类可以将上传的图像压缩为所需的大小。按钮action_performed的代码如下,用于运行文件选择器:

private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {                                          
try{
String sql = "delete from TempImage";
pst=con.prepareStatement(sql);
pst.execute();
}catch(SQLException | HeadlessException e){
JOptionPane.showMessageDialog(null, e);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
JFileChooser chooser =new JFileChooser();
chooser.showOpenDialog(null);
File f =chooser.getSelectedFile();
filename=f.getAbsolutePath();
image1.setText(filename);

try{
File imgs =new File(filename);
BufferedImage bufferedimage=ImageIO.read(imgs);
BufferedImage thumbnail=Thumbnails.of(bufferedimage)
.size(125, 114)
.asBufferedImage();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(thumbnail,"jpeg", os);
InputStream is=new ByteArrayInputStream(os.toByteArray());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf =new byte[1024];
try{
for(int readNum; (readNum=is.read(buf))!=-1;){
bos.write(buf,0,readNum);
System.out.println("Read" +readNum+ "bytes,");
}
}catch(IOException ex){
Logger.getLogger(null);
}
person_image=bos.toByteArray();
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
try{
String sql="insert into TempImage(Image)values(?)";
pst = con.prepareStatement(sql);
pst.setBytes(1, person_image);
pst.execute();
}catch(SQLException | HeadlessException ep){
JOptionPane.showMessageDialog(null,ep);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){

}
}
try{
String sql ="select Image from TempImage";
pst=con.prepareStatement(sql);
rs=pst.executeQuery();

if(rs.next()){
byte[] imagedata = rs.getBytes("Image");
format =new ImageIcon(imagedata);
image.setIcon(format);
} }catch(SQLException | HeadlessException e){
JOptionPane.showMessageDialog(null, e);
}
finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}// TODO add your handling code here:
}

这段代码的作用是从“临时图像表”中删除图像,将文件选择器中选择的压缩图像插入到“临时图像表”中,然后 jlable 显示从计算机中选择的图像以供预览,然后用户最终接受并将所选图像永久保存到数据库中。
但是当文件选择器打开时,我希望在用户选择他的选择之前所有图像文件都处于缩略图 View 中。
请问如何在 jfilechooser 中包含图像缩略图?

最佳答案

使用 JFileChooser 没有简单的方法可以做到这一点。金属的外观和感觉非常有限。 Metal Look and Feel仅提供文件排列之类的列表,它不使用Windows界面,因此您必须使用其他技术。

就像这个 possible duplicated question ,您可以通过一种hackish方式来实现它。另一种解决方案是使用FileDialog而不是JFileChooser。 FileDialog 类使用当前操作系统的外观和感觉,使用其组件而不是按照自己的标准排列它,因此您的用户将能够将其视为 LargeIcon(如果他/她愿意)。你可以找到它的文档here 。示例如下:

FileDialog fileDialog = new FileDialog(yourJFrame, "Choose a file", FileDialog.LOAD);
fd.setDirectory("the directory you want the dialog to be opened in");
fd.setFile("*.desiredExtension");
fd.setVisible(true);
String filename = fd.getFile();
if (filename == null)
//your user cancelled the choise
else
//file chosen

关于java - 在 jfilechooser 中包含图像缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51951090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com