java写一个程序代码,利用图形用户界面(GUI)的知识点,把二进制类型文件(图片、声音等)的复制功能图形化。图形用户界面需要包含8个以上的Swing组件;要给至少一个组件添加事件响应;学习课本外观和感觉的知识点Look and Feel,窗口界面使用一款第三方的外观。
时间: 2024-02-28 12:53:44 浏览: 94
java中GUI界面运用Swing组件进行文件以及图片的拷贝
好的,下面是一个简单的Java程序,利用图形用户界面(GUI)的知识点,把二进制类型文件(图片、声音等)的复制功能图形化。图形用户界面包含了8个以上的Swing组件,并给JButton组件添加了事件响应。同时,程序使用了Nimbus外观来美化窗口。
```
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
public class BinaryFileCopyGUI extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JFileChooser fileChooser;
private JButton copyButton;
private JLabel statusLabel;
private JProgressBar progressBar;
public BinaryFileCopyGUI() {
super("Binary File Copy");
// 设置外观为Nimbus
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
// 创建文件选择器
fileChooser = new JFileChooser();
// 创建复制按钮
copyButton = new JButton("Copy");
copyButton.addActionListener(this);
// 创建状态标签
statusLabel = new JLabel("Select a file to copy");
// 创建进度条
progressBar = new JProgressBar(0, 100);
progressBar.setStringPainted(true);
// 创建面板并添加组件
JPanel panel = new JPanel(new FlowLayout());
panel.add(copyButton);
panel.add(statusLabel);
// 添加组件到窗口
add(panel, BorderLayout.NORTH);
add(progressBar, BorderLayout.CENTER);
// 设置窗口属性
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(400, 100));
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// 当用户点击复制按钮时
if (e.getSource() == copyButton) {
// 显示文件选择器
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
// 获取选择的文件
File sourceFile = fileChooser.getSelectedFile();
// 创建目标文件
File destFile = new File(sourceFile.getParentFile(), "copy_" + sourceFile.getName());
// 复制文件
try (FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile)) {
byte[] buffer = new byte[1024];
long fileSize = sourceFile.length();
long bytesCopied = 0;
int bytes = 0;
while ((bytes = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytes);
bytesCopied += bytes;
int progress = (int) ((bytesCopied * 100) / fileSize);
progressBar.setValue(progress);
statusLabel.setText("Copying " + sourceFile.getName() + " (" + progress + "%)");
}
statusLabel.setText("Copy completed");
JOptionPane.showMessageDialog(this, "File copied successfully!");
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "Failed to copy file!");
}
}
}
}
public static void main(String[] args) {
new BinaryFileCopyGUI();
}
}
```
通过以上代码,我们创建了一个简单的图形化二进制文件复制程序,用户可以使用它来复制图片、声音等文件,程序通过JProgressBar组件来实时显示复制进度,通过JOptionPane组件来弹出复制成功或失败的提示框。
阅读全文