Java 系統圖示提煉
Java這是一個範例程序,可以將指定檔案中的圖示提取到 PNG 圖像檔案中。指定檔案可以是任何檔案類型,包括副檔名為 .exe 的可執行文件,以及 .dll、.xls、.doc 等檔案。
我在網路上搜尋過類似的方法,但沒有找到。
不過,我發現了一個非常簡單的獲取方法,所以我會和你們分享。
請注意,Chat&Messenger 不使用此方法。將文件附加到便籤的功能。我用它。
範例程式運行驗證
運行範例
*如果與 jar 檔案關聯,則可以執行此操作。
- 取得範例原始碼,編譯並運行它。
- 啟動應用程式後,主視窗將會開啟。只需將要提取的圖示拖放到此視窗中即可。
- PNG 圖像檔案將輸出到與原始圖示相同的位置。
範例程式說明
Java 中圖示擷取過程採用以下方法實作。
-
將外觀設定為 Windows 樣式。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - 透過拖放獲取的文件 javax.swing.JFileChooser.getIcon() 方法 javax.swing.Icon 將其轉換為物件。
- javax.imageio.ImageIO.write() 此方法將 Icon 物件輸出為 PNG 映像檔。
範例程式
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
導入 javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class IconExtractor extends JFrame
implements DropTargetListener {
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JFileChooser 選擇器;
public static void main(String[] args) {
IconExtractor extractor = new IconExtractor();
extractor.setVisible(true);
}
public IconExtractor() {
極好的();
嘗試 {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
chooser = new JFileChooser();
} catch (Exception e) {
e.printStackTrace();
}
初始化();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("圖示提取");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private JPanel getJContentPane() {
如果 (jContentPane == null) {
jLabel = new JLabel();
jLabel.setText("請拖曳圖示。");
jLabel.setBackground(Color.white);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setOpaque(true);
新的 DropTarget(jLabel,
DnDConstants.ACTION_COPY_OR_MOVE,this);
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.CENTER);
}
返回 jContentPane;;
}
// — 實作 DropTargetListener —————————-
public void drop(DropTargetDropEvent dtde) {
dtde.acceptDrop(DnDConstants.ACTION_MOVE);
嘗試 {
可轉移的 tran = dtde.getTransferable();
列表 fileList = (列表) tran
.getTransferData(DataFlavor.javaFileListFlavor);
Iterator iterator = fileList.iterator();
while (iterator.hasNext()) {
檔案 file = (File) iterator.next();
ImageIcon icon = (ImageIcon) chooser.getIcon(file);
String ext = file.getAbsoluteFile() + “.png”;
// 儲存圖片文件
ImageIO.write((BufferedImage) icon.getImage(), “png”,
new File(ext));
jLabel.setText(“<html>提取完成<br>” + ext);
設定圖示影像(icon.getImage());
}
dtde.dropComplete(true);
} catch (Exception e) {
e.printStackTrace();
dtde.dropComplete(false);
}
}
public void dragEnter(DropTargetDragEvent e) {
}
public void dragOver(DropTargetDragEvent e) {
}
public void dropActionChanged(DropTargetDragEvent e) {
}
public void dragExit(DropTargetEvent e) {
}
}
