1

私はスイングを使用して画像トレイを作成しています。フォルダーまたはドライブ内のすべての画像ファイルを検索し、これらを実際には JPanel であるトレイに追加します。コードは次のとおりです。

public void findAllPhotos(File f ) {
    File[] files = f.listFiles();
    for (File file : files) {
        if(file.isFile()) {
            String path = file.getAbsolutePath();
            for(String s : extensions) {
                if(path.endsWith(s)) {
                     addImageToTray(file);
                    break;
                }
            }
        }
        else {
            findAllPhotos(file);
        }
     }
}
void addImageToTray(File fname) {
    try {
        BufferedImage img = ImageIO.read(fname);
        if(img == null) return;
        double width = 0, height = 0;
        if(iconView) {
            width = Math.min(img.getWidth(), iconWidth); 
            height = Math.min(img.getHeight(), iconHeight);
        }
        else {
            width = Math.min(img.getWidth(), tileWidth); 
            height = Math.min(img.getHeight(), tileHeight);
        }
        AffineTransform af = new AffineTransform(AffineTransform.getScaleInstance(width/img.getWidth(), (height/img.getHeight()))); 
        img = new AffineTransformOp(af, AffineTransformOp.TYPE_NEAREST_NEIGHBOR).filter(img, null);
        JLabel jl = new JLabel(new ImageIcon(img));
        if(iconView) { 
            jl.setText("   " +fname.getName());
            jl.setFont(new java.awt.Font("Microsoft JhengHei UI Light", 1, 11)); 
        }
        addActionListner(jl, fname.getAbsolutePath());
        jl.setBorder(new BevelBorder(BevelBorder.LOWERED));
        tray.add(jl);
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "unknown problem, with tray creation!!!");
    }
}

私の問題は、大きなフォルダーやドライブのスキャン中に速度が低下することです。速度を改善する方法を提案してください

4

1 に答える 1