Cho em hỏi, cái nút New File của em sao nó không chạy được. Mong mọi người giúp em
import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.tree.*;
public class Explorer extends JFrame implements ActionListener{
private JPanel contentPane;
private FileSystemView fsv;
private JTable table;
private String PathNow, Pathold, thisfile="", active;
private JProgressBar progressBar;
private JButton btnNewFile, btnNewFolder, btnCut, btnDelete, btnParent, btnRename, btnCopy, btnPaste;
File Now;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Explorer frame = new Explorer();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Explorer() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 812, 537);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
setVisible(true);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 249, 458);
contentPane.add(scrollPane);
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
fsv = FileSystemView.getFileSystemView();
File[] roots = fsv.getRoots();
for (File f : roots) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(f);
root.add( node );
showchildren(node);
}
DefaultTreeModel treemodel = new DefaultTreeModel(root);
JTree tree = new JTree(treemodel);
tree.setRootVisible(false);
scrollPane.setViewportView(tree);
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(271, 29, 506, 440);
contentPane.add(scrollPane_1);
table = new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setAutoCreateRowSorter(true);
table.setShowVerticalLines(false);
table.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent arg0) {
try {
PathNow = String.valueOf(table.getValueAt(table.getSelectedRow(), 2));
if (arg0.getClickCount() == 2) {
File f = new File(String.valueOf(table.getValueAt(table.getSelectedRow(), 2)));
if(f.isFile())
try {
Desktop.getDesktop().open(f);
} catch (IOException e) {
}
else {
File files[] = fsv.getFiles(f, true);
table.removeAll();
ResetTableData(files);
}
Now = new File(PathNow);
Pathold = PathNow;
}
} catch (Exception e) {
// TODO: handle exception
}
}
});
scrollPane_1.setViewportView(table);
tree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent arg0) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) arg0.getPath().getLastPathComponent();
showchildren(node);
File f = (File) node.getUserObject();
File[] files = fsv.getFiles(f, true);
ResetTableData(files);
Now = f;
}
});
tree.expandRow(0);
tree.setCellRenderer(new FileTreeCellRenderer());
progressBar = new JProgressBar();
progressBar.setBounds(687, 6, 100, 10);
contentPane.add(progressBar);
progressBar.setVisible(false);
progressBar.setIndeterminate(false);
btnParent = new JButton();
btnParent.setBounds(271, 0, 37, 30);
btnParent.setIcon(new ImageIcon("D:\\LapTrinhJava\\Thi\\IMG\\cut.png"));
btnParent.addActionListener(this);
contentPane.add(btnParent);
btnNewFile = new JButton();
btnNewFile.setBounds(320, 0, 37, 30);
btnNewFile.setIcon(new ImageIcon(".//IMG//newfile.png"));
btnNewFile.addActionListener(this);
contentPane.add(btnNewFile);
btnNewFolder = new JButton();
btnNewFolder.setBounds(369, 0, 37, 30);
btnNewFolder.setIcon(new ImageIcon(".//IMG//newfolder.png"));
btnNewFolder.addActionListener(this);
contentPane.add(btnNewFolder);
btnCut = new JButton();
btnCut.setBounds(418, 0, 37, 30);
btnCut.addActionListener(this);
btnCut.setIcon(new ImageIcon("D:\\LapTrinhJava\\Thi\\IMG\\cut (1).png"));
//btnCut.setText("Cut");
contentPane.add(btnCut);
btnCopy = new JButton();
btnCopy.setBounds(472, 0, 37, 30);
btnCopy.addActionListener(this);
btnCopy.setIcon(new ImageIcon(".//IMG//copy.png"));
contentPane.add(btnCopy);
btnPaste = new JButton();
btnPaste.setBounds(521, 0, 37, 30);
btnPaste.addActionListener(this);
//btnPaste.setIcon(new ImageIcon(".//IMG//paste.png"));
btnParent.setText("Paste");
contentPane.add(btnPaste);
btnRename = new JButton();
btnRename.setBounds(570, 0, 37, 30);
btnRename.addActionListener(this);
btnRename.setIcon(new ImageIcon(".//IMG//rename.png"));
contentPane.add(btnRename);
btnDelete = new JButton();
btnDelete.setBounds(619, 0, 37, 30);
btnDelete.addActionListener(this);
btnDelete.setIcon(new ImageIcon(".//IMG//delete.png"));
contentPane.add(btnDelete);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnMenu = new JMenu("File Explorer");
menuBar.add(mnMenu);
JMenu mnNew = new JMenu("New");
mnMenu.add(mnNew);
JMenuItem mntmFile = new JMenuItem("File");
mnNew.add(mntmFile);
JMenuItem mntmFolder = new JMenuItem("Folder");
mnNew.add(mntmFolder);
JMenuItem mntmCopy = new JMenuItem("Copy");
mnMenu.add(mntmCopy);
JMenuItem mntmCut = new JMenuItem("Cut");
mnMenu.add(mntmCut);
JMenuItem mntmDelete = new JMenuItem("Delete");
mnMenu.add(mntmDelete);
JMenuItem mntmPaste = new JMenuItem("Paste");
mnMenu.add(mntmPaste);
JMenuItem mntmRename = new JMenuItem("Rename");
mnMenu.add(mntmRename);
mntmCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
mntmPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
mntmFolder.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
mntmCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
mntmFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK));
mntmCopy.addActionListener(this);
mntmCut.addActionListener(this);
mntmRename.addActionListener(this);
mntmPaste.addActionListener(this);
mntmDelete.addActionListener(this);
}
public void ResetTableData(File[] files) {
table.setModel(new FileTableModel(files));
table.setRowHeight( 25 );
setColumnWidth(0,-1);
setColumnWidth(3,60);
table.getColumnModel().getColumn(3).setMaxWidth(120);
setColumnWidth(4,-1);
}
public void showchildren(DefaultMutableTreeNode node) {
node.removeAllChildren();
File f = (File) node.getUserObject();
File[] files = fsv.getFiles(f, true);
for (File file : files) {
if(file.isDirectory()) {
node.add(new DefaultMutableTreeNode(file));
}
}
}
private void setColumnWidth(int column, int width) {
TableColumn tableColumn = table.getColumnModel().getColumn(column);
if (width<0) {
JLabel label = new JLabel( (String)tableColumn.getHeaderValue() );
Dimension preferred = label.getPreferredSize();
width = (int)preferred.getWidth()+14;
}
tableColumn.setPreferredWidth(width);
tableColumn.setMaxWidth(width);
tableColumn.setMinWidth(width);
}
public void CopyFile(File fold, File fnew) {
try {
if(fnew.exists()) {
JOptionPane.showMessageDialog(null, "File "+fnew.getName(), "Error!", 0);
return;
}
else {
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
fnew.createNewFile();
FileInputStream fis = new FileInputStream(fold);
FileOutputStream fos = new FileOutputStream(fnew);
int c;
while((c=fis.read())!=-1) {
fos.write((char) c);
}
fnew.setExecutable(fold.canExecute());
fnew.setReadable(fold.canRead());
fnew.setWritable(fold.canWrite());
fis.close();
fos.close();
progressBar.setVisible(false);
progressBar.setIndeterminate(false);
JOptionPane.showMessageDialog(null, active+" done!" );
active="";
} catch (IOException e) {}
}
});
t.setDaemon(true);
t.start();
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void CutFile(File fold, File fnew) {
try {
if(fnew.exists()) return;
else {
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
fnew.createNewFile();
FileInputStream fis = new FileInputStream(fold);
FileOutputStream fos = new FileOutputStream(fnew);
int c;
while((c=fis.read())!=-1) {
fos.write((char) c);
}
fnew.setExecutable(fold.canExecute());
fnew.setReadable(fold.canRead());
fnew.setWritable(fold.canWrite());
fis.close();
fos.close();
fold.delete();
JOptionPane.showMessageDialog(null, active+" done!" );
active="";
progressBar.setVisible(false);
progressBar.setIndeterminate(false);
} catch (IOException e) {}
}
});
t.setDaemon(true);
t.start();
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void DeleteFile(File f) {
try {
if(f.isFile()) {
f.delete();
}
else {
File files[] = f.listFiles();
if(files.length==0) f.delete();
else {
for (File file : files) {
if(f.isFile()) f.delete();
else DeleteFile(file);
}
f.delete();
}
f.delete();
}
} catch (Exception e) {
}
}
public void NewFile(String path) {
try {
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
String name = JOptionPane.showInputDialog("Input file name");
if(name==null) return;
else {
File f = new File(path, name);
if(f.exists()) {
JOptionPane.showMessageDialog(null, "Error", "File existed! Can't create!", 0);
return;
}else {
if(f.createNewFile()==false) {
JOptionPane.showMessageDialog(null, "Error", "Can't create!", 0);
}
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void NewFolder(String path) {
try {
String name = JOptionPane.showInputDialog("Input folder name");
if(name==null) return;
else {
File f = new File(path, name);
if(f.exists()) {
JOptionPane.showMessageDialog(null, "Error", "folder existed! Can't create!", 0);
return;
}else {
if(f.mkdir()==false) {
JOptionPane.showMessageDialog(null, "Error", "Can't create!", 0);
}
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
//
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().equals("Paste")|| arg0.getSource()==btnPaste ) {
if(thisfile==null) return;
else {
File fold = new File(thisfile);
File fnew = new File(PathNow,fold.getName());
if(fold==null || fnew==null) System.out.println("lỗi");//return;
else {
if(active.equals("Copy")) CopyFile(fold, fnew);
else if(active.equals("Cut")) CutFile(fold, fnew);
File f = fnew.getParentFile();
File[] files = fsv.getFiles(f, true);
ResetTableData(files);
}
}
}
else if(arg0.getActionCommand().equals("Delete")|| arg0.getSource()==btnDelete) {
File f = new File(PathNow);
if(JOptionPane.showConfirmDialog(null, "Are you sure?","Delete "+ f.getName(),2)==JOptionPane.OK_OPTION) {
DeleteFile(f);
JOptionPane.showMessageDialog(null, "Deleted!");
}
else return;
File fa = f.getParentFile();
File[] files = fsv.getFiles(fa, true);
ResetTableData(files);
}
else if(arg0.getActionCommand().equals("Rename")|| arg0.getSource()==btnRename) {
try {
File fold = new File(PathNow);
String newname = JOptionPane.showInputDialog(null, "New name?", "Rename", 1);
File fnew = new File(fold.getParent(),newname );
fold.renameTo(fnew);
JOptionPane.showMessageDialog(null, "Rename done!");
File f = fold.getParentFile();
File[] files = fsv.getFiles(f, true);
ResetTableData(files);
} catch (Exception e) {
}
}
else if(arg0.getActionCommand().equals("Cut")|| arg0.getSource()==btnCut) {
thisfile = PathNow;
active = "Cut";
}
else if(arg0.getActionCommand().equals("Copy")|| arg0.getSource()==btnCopy){
thisfile = PathNow;
active = "Copy";
}
else if(arg0.getSource()==btnParent) {
try {
File[] files = fsv.getFiles(Now.getParentFile(), true);
ResetTableData(files);
Now = Now.getParentFile();
} catch (Exception e) {
}
}
else if(arg0.getActionCommand().equals("File")|| arg0.getSource()==btnNewFile) {
NewFile(PathNow);
File f = new File(PathNow);
File[] files = fsv.getFiles(f, true);
ResetTableData(files);
}
else if(arg0.getActionCommand().equals("Folder")|| arg0.getSource()==btnNewFolder) {
try {
NewFolder(PathNow);
File f = new File(PathNow);
File[] files = fsv.getFiles(f, true);
ResetTableData(files);
} catch (Exception e) {
System.out.println();
}
}
}
}
class FileTableModel extends AbstractTableModel {
private File[] files;
private FileSystemView fileSystemView = FileSystemView.getFileSystemView();
private String[] columns = {
"Icon",
"File",
"Path/name",
"Size",
"Last Modified"
};
FileTableModel(File[] files) {
this.files = files;
}
public Object getValueAt(int row, int column) {
File file = files[row];
switch (column) {
case 0:
return fileSystemView.getSystemIcon(file);
case 1:
return fileSystemView.getSystemDisplayName(file);
case 2:
return file.getPath();
case 3:
return file.length();
case 4:
return file.lastModified();
}
return "";
}
public int getColumnCount() {
return columns.length;
}
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return ImageIcon.class;
case 3:
return Long.class;
case 4:
return Date.class;
}
return String.class;
}
public String getColumnName(int column) {
return columns[column];
}
public int getRowCount() {
return files.length;
}
public File getFile(int row) {
return files[row];
}
public void setFiles(File[] files) {
this.files = files;
fireTableDataChanged();
}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?