支援圖片預覽的檔案選擇對話方塊
本例項在檔案選擇器JFileChooser類的基礎上開發了支援圖片預覽效果的檔案選擇對話方塊。在選擇圖片檔案,特別是選擇數碼相機中的隨機命名的圖片時極為方便。例項的效果如下:
完整程式碼如下:
package cn.whut.num;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Image;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class PreviewFileDialog extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JFileChooser fileChooser;
private ImagePreviewer imageLabel;
private ImagePreviewer previewer;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PreviewFileDialog frame = new PreviewFileDialog();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public PreviewFileDialog() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 629, 428);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
JButton chooseButton = new JButton(
"\u9009\u62E9\u56FE\u7247\u6587\u4EF6");
chooseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
panel.add(chooseButton);
imageLabel = new ImagePreviewer((JFileChooser) null);
contentPane.add(imageLabel, BorderLayout.CENTER);
initFileChooser();
}
/**
* 初始化檔案選擇器
*/
private void initFileChooser() {
fileChooser = new JFileChooser();// 建立檔案選擇器
previewer = new ImagePreviewer(fileChooser);// 建立圖片預覽標籤
fileChooser.setFileFilter(new FileNameExtensionFilter("圖片檔案", "jpg",
"gif", "png"));
// 為指定屬性變更新增事件監聽器
fileChooser.addPropertyChangeListener("SelectedFileChangedProperty",
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
// 屬性改變時設定預覽標籤的圖片
previewer.setImageFile((File) evt.getNewValue());
}
});
fileChooser.setAccessory(previewer);
}
/**
* 選擇圖片檔案按鈕的事件處理方法
*
* @param e
*/
protected void do_button_actionPerformed(ActionEvent e) {
int option = fileChooser.showOpenDialog(this);// 顯示開啟檔案對話方塊
if (option == JFileChooser.APPROVE_OPTION) {
// 獲取選擇的檔案物件
File file = fileChooser.getSelectedFile();
// 更新窗體中圖片
imageLabel.setImageFile(file);
}
}
}
/**
* 自定義圖片預覽標籤
*
*/
class ImagePreviewer extends JLabel {
public ImagePreviewer(JFileChooser chooser) {
// 初始大小
setPreferredSize(new Dimension(200, 200));
setHorizontalAlignment(JLabel.CENTER);// 水平居中
setBorder(new LineBorder(Color.GRAY));// 設定邊框
setOpaque(true);// 標籤不透明
setBackground(Color.WHITE);// 設定背景色
setText("沒有設定圖片");// 預設文字
}
/**
* 設定標籤圖片的方法
*
* @param file
*/
public void setImageFile(File file) {
setText("");// 清空圖片預覽標籤的文字
if (file == null) {// 如果檔案物件為空
setText("沒有設定圖片");// 設定預設提示文字
return;// 終止方法
}
// 建立圖示物件
ImageIcon icon = new ImageIcon(file.getPath());
if (icon.getIconWidth() > getWidth()) {// 設定圖示大小
icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(),
-1, Image.SCALE_DEFAULT));
}
setIcon(icon);// 為標籤設定圖示
repaint();// 重新繪製介面
}
}
相關文章
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- 【Qt 專欄】檔案對話方塊 檔案的彈窗選擇-QFileDialogQT
- c++開啟挑選圖片對話方塊C++
- Javascript檔案對話方塊JavaScript
- Matlab - 獲取和儲存檔案路徑選擇對話方塊Matlab
- html input type=file 選擇圖片,圖片預覽 純html js實現圖片預覽HTMLJS
- 資料夾選擇對話方塊 JS實現(轉)JS
- Electron 開啟儲存檔案對話方塊
- VUE:點選開啟的對話方塊外面時,對話方塊總是被關閉Vue
- Win10系統怎麼禁用“刪除檔案”對話方塊_win10禁用“刪除檔案”對話方塊的方法Win10
- Android小記-仿淘寶聯動地址選擇對話方塊Android
- 常用元件 / 對話方塊及選單元件
- 利用input type=file和FileReader API實現在瀏覽器客戶端通過選擇對話方塊讀取檔案API瀏覽器客戶端
- 實戰PyQt5: 058-字型選擇對話方塊QFontDialogQT
- PyQt5開啟檔案對話方塊QFileDialogQT
- Android通知之多選對話方塊通知Android
- pyqt-PyQt5開啟檔案對話方塊QFileDialogQT
- c#中的模態對話方塊和非模態對話方塊C#
- Android通知之單選對話方塊通知Android
- FileReader()讀取檔案、圖片上傳預覽
- 對話方塊函式函式
- React中的模式對話方塊React模式
- ASP.NET下載檔案(彈出開啟儲存檔案對話方塊)ASP.NET
- 微信公眾號客服系統-接收對話方塊文字圖片影片訊息
- flutter demo (四):對話方塊Flutter
- 呼叫系統檔案管理器選擇圖片,呼叫系統裁剪AIP對圖片處理,顯示裁剪之後的圖片...AI
- c# winform窗體之開啟檔案對話方塊openfiledialogC#ORM
- Flutter 23: 圖解自定義 Dialog 對話方塊Flutter圖解
- 一個Flex 對話方塊的坑Flex
- javascript中的彈出對話方塊JavaScript
- 微信小程式-拍照或選擇圖片並上傳檔案微信小程式
- iOS專案開發實戰——監聽對話方塊的按鈕點選事件iOS事件
- 前端圖片預覽前端
- 【Android初級】如何實現一個具有選擇功能的對話方塊效果(附原始碼)Android原始碼
- [Java實現] 圖片擇優(選擇最清楚的圖片)Java
- 在 Flutter 使用 GetX 對話方塊Flutter
- Qt 對話方塊新增工具欄QT
- 如何自學qt(4)——對話方塊QT