first commit
This commit is contained in:
commit
5e9828b53e
8 files changed
+447
No files matched your search
@@ -0,0 +1,159 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public final class FileSelectionPanel extends JPanel {
|
||||
|
||||
private final DefaultListModel<File> fileModel;
|
||||
private final JList<File> fileList;
|
||||
|
||||
public FileSelectionPanel() {
|
||||
super(new BorderLayout(8, 8));
|
||||
|
||||
fileModel = new DefaultListModel<>();
|
||||
fileList = new JList<>(fileModel);
|
||||
|
||||
fileList.setCellRenderer((list, file, index, selected, focus) -> {
|
||||
String name = file.getName();
|
||||
|
||||
if (name.isEmpty()) {
|
||||
name = file.getAbsolutePath();
|
||||
}
|
||||
|
||||
JLabel label = new JLabel(
|
||||
name + " — " + getFileSize(file)
|
||||
);
|
||||
|
||||
label.setOpaque(true);
|
||||
label.setBorder(
|
||||
BorderFactory.createEmptyBorder(6, 8, 6, 8)
|
||||
);
|
||||
|
||||
if (selected) {
|
||||
label.setBackground(list.getSelectionBackground());
|
||||
label.setForeground(list.getSelectionForeground());
|
||||
} else {
|
||||
label.setBackground(list.getBackground());
|
||||
label.setForeground(list.getForeground());
|
||||
}
|
||||
|
||||
return label;
|
||||
});
|
||||
|
||||
JButton addFilesButton = new JButton("Añadir archivos");
|
||||
JButton addFolderButton = new JButton("Añadir carpeta");
|
||||
JButton removeButton = new JButton("Quitar selección");
|
||||
|
||||
addFilesButton.addActionListener(event -> selectFiles());
|
||||
addFolderButton.addActionListener(event -> selectFolder());
|
||||
removeButton.addActionListener(event -> removeSelectedFiles());
|
||||
|
||||
JPanel buttons = new JPanel(
|
||||
new FlowLayout(FlowLayout.LEFT)
|
||||
);
|
||||
|
||||
buttons.add(addFilesButton);
|
||||
buttons.add(addFolderButton);
|
||||
buttons.add(removeButton);
|
||||
|
||||
add(buttons, BorderLayout.NORTH);
|
||||
add(new JScrollPane(fileList), BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
private void selectFiles() {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
|
||||
chooser.setMultiSelectionEnabled(true);
|
||||
chooser.setFileSelectionMode(
|
||||
JFileChooser.FILES_ONLY
|
||||
);
|
||||
|
||||
int result = chooser.showOpenDialog(this);
|
||||
|
||||
if (result == JFileChooser.APPROVE_OPTION) {
|
||||
for (File file : chooser.getSelectedFiles()) {
|
||||
addFile(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void selectFolder() {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
|
||||
chooser.setFileSelectionMode(
|
||||
JFileChooser.DIRECTORIES_ONLY
|
||||
);
|
||||
|
||||
int result = chooser.showOpenDialog(this);
|
||||
|
||||
if (result == JFileChooser.APPROVE_OPTION) {
|
||||
addFile(chooser.getSelectedFile());
|
||||
}
|
||||
}
|
||||
|
||||
private void addFile(File file) {
|
||||
if (!file.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < fileModel.size(); i++) {
|
||||
if (fileModel.get(i).equals(file)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (file.getName().toLowerCase().endsWith(".lbt")) {
|
||||
JOptionPane.showMessageDialog(
|
||||
this,
|
||||
"No se pueden añadir archivos .lbt para comprimir.",
|
||||
"Archivo no permitido",
|
||||
JOptionPane.WARNING_MESSAGE
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
fileModel.addElement(file);
|
||||
}
|
||||
|
||||
private void removeSelectedFiles() {
|
||||
List<File> selectedFiles = fileList.getSelectedValuesList();
|
||||
|
||||
for (File file : selectedFiles) {
|
||||
fileModel.removeElement(file);
|
||||
}
|
||||
}
|
||||
|
||||
private String getFileSize(File file) {
|
||||
if (file.isDirectory()) {
|
||||
return "Carpeta";
|
||||
}
|
||||
|
||||
long bytes = file.length();
|
||||
|
||||
if (bytes < 1024) {
|
||||
return bytes + " B";
|
||||
}
|
||||
|
||||
if (bytes < 1024 * 1024) {
|
||||
return String.format("%.1f KB", bytes / 1024.0);
|
||||
}
|
||||
|
||||
if (bytes < 1024L * 1024 * 1024) {
|
||||
return String.format(
|
||||
"%.1f MB",
|
||||
bytes / (1024.0 * 1024.0)
|
||||
);
|
||||
}
|
||||
|
||||
return String.format(
|
||||
"%.2f GB",
|
||||
bytes / (1024.0 * 1024.0 * 1024.0)
|
||||
);
|
||||
}
|
||||
|
||||
public List<File> getSelectedFiles() {
|
||||
return fileList.getSelectedValuesList();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user