JTree(右鍵選單,可拖拽)+JTable(可翻頁,列中含有按鈕,隱藏列)
阿新 • • 發佈:2019-01-31
首先來看一下展示介面,JTree的特點有:節點可拖拽,根據輸入生成目錄,右鍵有選單,點選觸發事件等
JTable的特點有:含有隱藏列,可以進行翻頁,列中含有下載按鈕等
在來看一下程式碼吧,基本程式碼由Eclipse上的WindowBuilder進行拖拽式產生的,所以看起來有點亂,不過沒事
在使用WindowBuilder的時候要畫JTree和JTable時要注意,這兩個有幾個共同點,必須放到JScrollPanel中,因為這兩個控制元件的內容長度會發生突然變化,所以要使用JScrollPanel。
package test; import java.awt.BorderLayout; import java.awt.Component; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; import javax.swing.AbstractAction; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.border.EmptyBorder; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.tree.DefaultMutableTreeNode; public class InnerDocsMgt extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JTable table; private JTree tree; private JLabel currentDirLabel; private JLabel totalFilesNumLabel; private List<VEachFile> docFils; private final int maxFilesAPage = 50; private JLabel curPageLabel; private int curPageNum = 0; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { InnerDocsMgt frame = new InnerDocsMgt(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public InnerDocsMgt() { setTitle("\u5185\u90E8\u8D44\u6599\u7BA1\u7406"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); this.setSize(800, 600); 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.WEST); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[] { 54, 0, 0, 0, 0, 0, 0, 0 }; gbl_panel.rowHeights = new int[] { 31, 0, 0 }; gbl_panel.columnWeights = new double[] { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_panel.rowWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; panel.setLayout(gbl_panel); JLabel lblNewLabel = new JLabel( "\u5185\u90E8\u8D44\u6599\u76EE\u5F55\u5217\u8868"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.gridwidth = 5; gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 0; panel.add(lblNewLabel, gbc_lblNewLabel); JButton button_4 = new JButton("\u4FDD\u5B58\u76EE\u5F55\u64CD\u4F5C"); GridBagConstraints gbc_button_4 = new GridBagConstraints(); gbc_button_4.insets = new Insets(0, 0, 5, 5); gbc_button_4.gridx = 5; gbc_button_4.gridy = 0; panel.add(button_4, gbc_button_4); JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.gridwidth = 7; gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 0; gbc_scrollPane.gridy = 1; panel.add(scrollPane, gbc_scrollPane); DefaultMutableTreeNode top = new DefaultMutableTreeNode("/"); createNodes(top); tree = new JTree(top); scrollPane.setViewportView(tree); tree.setEditable(true); tree.setDragEnabled(true); this.setPopupMenu(); try { tree.setTransferHandler(new DocsTreeTransferHanlder()); } catch (ClassNotFoundException e) { e.printStackTrace(); } JPanel panel_1 = new JPanel(); contentPane.add(panel_1, BorderLayout.CENTER); GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[] { 708, 0 }; gbl_panel_1.rowHeights = new int[] { 556, 0 }; gbl_panel_1.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_panel_1.rowWeights = new double[] { 1.0, Double.MIN_VALUE }; panel_1.setLayout(gbl_panel_1); JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); GridBagConstraints gbc_tabbedPane = new GridBagConstraints(); gbc_tabbedPane.fill = GridBagConstraints.BOTH; gbc_tabbedPane.gridx = 0; gbc_tabbedPane.gridy = 0; panel_1.add(tabbedPane, gbc_tabbedPane); JPanel panel_2 = new JPanel(); tabbedPane.addTab("\u6587\u4EF6\u4E0E\u76EE\u5F55\u7BA1\u7406", null, panel_2, null); GridBagLayout gbl_panel_2 = new GridBagLayout(); gbl_panel_2.columnWidths = new int[] { 166, 59, 0, 0, 0, 0, 0 }; gbl_panel_2.rowHeights = new int[] { 30, 0, 49, 0, 0, 0 }; gbl_panel_2.columnWeights = new double[] { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_panel_2.rowWeights = new double[] { 0.0, 0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE }; panel_2.setLayout(gbl_panel_2); currentDirLabel = new JLabel( "\u5F53\u524D\u76EE\u5F55\uFF1Aone->two->three"); GridBagConstraints gbc_lblonetwothree = new GridBagConstraints(); gbc_lblonetwothree.gridwidth = 6; gbc_lblonetwothree.anchor = GridBagConstraints.WEST; gbc_lblonetwothree.insets = new Insets(0, 0, 5, 0); gbc_lblonetwothree.gridx = 0; gbc_lblonetwothree.gridy = 0; panel_2.add(currentDirLabel, gbc_lblonetwothree); JButton button_3 = new JButton("\u5168\u9009/\u5168\u4E0D\u9009"); GridBagConstraints gbc_button_3 = new GridBagConstraints(); gbc_button_3.insets = new Insets(0, 0, 5, 5); gbc_button_3.gridx = 3; gbc_button_3.gridy = 1; panel_2.add(button_3, gbc_button_3); JButton button = new JButton("\u5220\u9664"); GridBagConstraints gbc_button = new GridBagConstraints(); gbc_button.insets = new Insets(0, 0, 5, 5); gbc_button.gridx = 4; gbc_button.gridy = 1; panel_2.add(button, gbc_button); JButton button_1 = new JButton("\u79FB\u52A8\u5230"); button_1.setToolTipText("\u8BF7\u5148\u9009\u62E9\u8981\u79FB\u52A8\u7684\u6587\u4EF6\uFF0C\u7136\u540E\u518D\u9009\u62E9\u4E00\u4E2A\u5DE6\u4FA7\u76EE\u5F55"); GridBagConstraints gbc_button_1 = new GridBagConstraints(); gbc_button_1.insets = new Insets(0, 0, 5, 0); gbc_button_1.gridx = 5; gbc_button_1.gridy = 1; panel_2.add(button_1, gbc_button_1); JScrollPane scrollPane_1 = new JScrollPane(); GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints(); gbc_scrollPane_1.gridwidth = 6; gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0); gbc_scrollPane_1.fill = GridBagConstraints.BOTH; gbc_scrollPane_1.gridx = 0; gbc_scrollPane_1.gridy = 2; panel_2.add(scrollPane_1, gbc_scrollPane_1); String[] headNames = new String[] { "\u9009\u62E9", "\u6587\u4EF6\u540D", "\u5927\u5C0F\uFF08KB\uFF09", "\u6587\u4EF6\u65E5\u671F", "\u4F5C\u8005", "", "\u4E0B\u8F7D" }; Object[][] tableDatas = new Object[][] { { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, { null, null, null, null, null, null, null }, }; table = new JTable(new DocsTableModel(headNames, tableDatas)); table.getColumnModel().getColumn(0) .setCellEditor(table.getDefaultEditor(Boolean.class)); table.getColumnModel().getColumn(0) .setCellRenderer(table.getDefaultRenderer(Boolean.class)); table.getColumnModel().getColumn(0).setPreferredWidth(38); table.getColumnModel().getColumn(1).setPreferredWidth(206); table.getColumnModel().getColumn(2).setPreferredWidth(53); table.getColumnModel().getColumn(3).setPreferredWidth(134); table.getColumnModel().getColumn(4).setPreferredWidth(58); // hide the 5th column, it contans the filepath table.getTableHeader().getColumnModel().getColumn(5).setMaxWidth(0);// hide table.getTableHeader().getColumnModel().getColumn(5).setMinWidth(0);// hide table.getTableHeader().getColumnModel().getColumn(5) .setPreferredWidth(0); table.getTableHeader().getColumnModel().getColumn(5).setWidth(0); table.getColumnModel().getColumn(6) .setCellRenderer(new ButtonCellRenderer()); table.getColumnModel().getColumn(6) .setCellEditor(new ButtonCellEditor(table)); scrollPane_1.setViewportView(table); totalFilesNumLabel = new JLabel("\u6587\u4EF6\u603B\u6570\uFF1A0"); GridBagConstraints gbc_totalFilesNumLabel = new GridBagConstraints(); gbc_totalFilesNumLabel.anchor = GridBagConstraints.WEST; gbc_totalFilesNumLabel.insets = new Insets(0, 0, 0, 5); gbc_totalFilesNumLabel.gridx = 0; gbc_totalFilesNumLabel.gridy = 4; panel_2.add(totalFilesNumLabel, gbc_totalFilesNumLabel); curPageLabel = new JLabel( "\u5F53\u524D\u9875\u6570\uFF1A0| \u603B\u9875\u6570\uFF1A0"); GridBagConstraints gbc_curPageLabel = new GridBagConstraints(); gbc_curPageLabel.gridwidth = 2; gbc_curPageLabel.insets = new Insets(0, 0, 0, 5); gbc_curPageLabel.gridx = 2; gbc_curPageLabel.gridy = 4; panel_2.add(curPageLabel, gbc_curPageLabel); JButton btnNewButton = new JButton("\u4E0A\u4E00\u9875"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { prePage(); } }); GridBagConstraints gbc_btnNewButton = new GridBagConstraints(); gbc_btnNewButton.insets = new Insets(0, 0, 0, 5); gbc_btnNewButton.gridx = 4; gbc_btnNewButton.gridy = 4; panel_2.add(btnNewButton, gbc_btnNewButton); JButton button_2 = new JButton("\u4E0B\u4E00\u9875"); button_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { nextPage(); } }); GridBagConstraints gbc_button_2 = new GridBagConstraints(); gbc_button_2.gridx = 5; gbc_button_2.gridy = 4; panel_2.add(button_2, gbc_button_2); JPanel panel_3 = new JPanel(); tabbedPane.addTab("\u7F16\u8F91\u6587\u6863", null, panel_3, null); GridBagLayout gbl_panel_3 = new GridBagLayout(); gbl_panel_3.columnWidths = new int[] { 0 }; gbl_panel_3.rowHeights = new int[] { 0 }; gbl_panel_3.columnWeights = new double[] { Double.MIN_VALUE }; gbl_panel_3.rowWeights = new double[] { Double.MIN_VALUE }; panel_3.setLayout(gbl_panel_3); } private void createNodes(DefaultMutableTreeNode top) { List<DefaultMutableTreeNode> nodes = DocsMgtRmi.getINS() .getFirstLevelDirs(); for (DefaultMutableTreeNode one : nodes) { top.add(one); } } public void setPopupMenu() { final JPopupMenu pop = new JPopupMenu(); pop.add(new AbstractAction("新增子目錄") { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { System.out.println("Tree Add"); } }); pop.add(new AbstractAction("刪除目錄") { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { System.out.println("Delete"); } }); tree.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (e.isMetaDown()) { pop.show(tree, e.getX(), e.getY()); } } public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 1) { VEachDir eDir = (VEachDir) getSelectedNode() .getUserObject(); docFils = DocsMgtRmi.getINS().getFilesViaDirid( eDir.getDirId()); int filesNum = docFils.size(); currentDirLabel .setText("\u5F53\u524D\u76EE\u5F55\uFF1Aone->two->three,=>DirID:" + eDir.getDirId()); totalFilesNumLabel.setText("\u6587\u4EF6\u603B\u6570\uFF1A" + filesNum); int maxNum = Math.min(maxFilesAPage, filesNum); if (filesNum <= maxFilesAPage) { curPageLabel .setText("\u5F53\u524D\u9875\u6570\uFF1A 1 | \u603B\u9875\u6570\uFF1A 1"); } else { int totalNum = filesNum / maxFilesAPage; if (totalNum * maxFilesAPage < filesNum) { totalNum++; } curPageLabel .setText("\u5F53\u524D\u9875\u6570\uFF1A 1 | \u603B\u9875\u6570\uFF1A " + totalNum); } curPageNum = 0; setDocTableValues(docFils.subList(0, maxNum)); } } }); } public void prePage() { if (this.curPageNum <= 0) { return; } int filesNum = docFils.size(); curPageNum--; int totalPage = filesNum / maxFilesAPage; if (totalPage * maxFilesAPage < filesNum) { totalPage++; } curPageLabel .setText("\u5F53\u524D\u9875\u6570\uFF1A " + (curPageNum + 1) + " | \u603B\u9875\u6570\uFF1A " + totalPage); setDocTableValues(docFils.subList(curPageNum * maxFilesAPage, Math.min((curPageNum + 1) * maxFilesAPage, filesNum))); } public void nextPage() { int filesNum = docFils.size(); int totalPage = filesNum / maxFilesAPage; if (totalPage * maxFilesAPage < filesNum) { totalPage++; } if (curPageNum >= totalPage - 1) { return; } curPageNum++; setDocTableValues(docFils.subList(curPageNum * maxFilesAPage, Math.min((curPageNum + 1) * maxFilesAPage, filesNum))); curPageLabel .setText("\u5F53\u524D\u9875\u6570\uFF1A " + (curPageNum + 1) + " | \u603B\u9875\u6570\uFF1A " + totalPage); } public void setDocTableValues(List<VEachFile> subDocs) { int i = 0; for (; i < subDocs.size(); i++) { table.getModel().setValueAt(false, i, 0); table.getModel().setValueAt(subDocs.get(i).getFileName(), i, 1); table.getModel().setValueAt(subDocs.get(i).getFileSize(), i, 2); table.getModel().setValueAt( subDocs.get(i).getFileDate().toLocaleString(), i, 3); table.getModel().setValueAt(subDocs.get(i).getFileAuthor(), i, 4); table.getModel().setValueAt(subDocs.get(i).getFilePath(), i, 5); } if (subDocs.size() < maxFilesAPage) { for (; i < maxFilesAPage; i++) { table.getModel().setValueAt(false, i, 0); table.getModel().setValueAt(null, i, 1); table.getModel().setValueAt(null, i, 2); table.getModel().setValueAt(null, i, 3); table.getModel().setValueAt(null, i, 4); table.getModel().setValueAt(null, i, 5); } } table.updateUI(); table.repaint(); } public DefaultMutableTreeNode getSelectedNode() { return (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); } class DocsTableModel extends AbstractTableModel { private String headName[]; private Object obj[][]; private Class[] columnTypes = new Class[] { Boolean.class, Object.class, Object.class, Object.class, Object.class, Object.class, Object.class }; public DocsTableModel() { super(); } public DocsTableModel(String[] headName, Object[][] obj) { this(); this.headName = headName; this.obj = obj; } public int getColumnCount() { return headName.length; } public int getRowCount() { return obj.length; } public Object getValueAt(int r, int c) { return obj[r][c]; } public String getColumnName(int c) { return headName[c]; } public Class<?> getColumnClass(int columnIndex) { return columnTypes[columnIndex].getClass(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } public void setValueAt(Object value, int row, int col) { obj[row][col] = value; fireTableCellUpdated(row, col); } } } class ButtonCellEditor extends DefaultCellEditor { private static final long serialVersionUID = -6546334664166791132L; private JButton button; private JTable table; public ButtonCellEditor(JTable table) { super(new JTextField()); this.setClickCountToStart(1); this.initButton(); this.table = table; } private void initButton() { this.button = new JButton(); this.button.setSize(50, 15); this.button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ButtonCellEditor.this.fireEditingCanceled(); System.out.println("Selected Column:" + table.getSelectedColumn() + ",row:" + table.getSelectedRow() + ",and filePath:" + table.getModel() .getValueAt(table.getSelectedRow(), 5)); } }); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { this.button.setText("下載"); return this.button; } @Override public Object getCellEditorValue() { return this.button.getText(); } } class ButtonCellRenderer implements TableCellRenderer { private JButton button; public ButtonCellRenderer() { this.button = new JButton(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { this.button.setText("下載"); return this.button; } }
其中裡面用到的製造資料的DocsMgtRmi類,支援Tree拖拽的事件響應器DocsTreeTransferHanlder,和裡面用到的兩個POJO物件VEachDir和VEachFile。
package test; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.tree.DefaultMutableTreeNode; import org.apache.log4j.Logger; public class DocsMgtRmi { private final Logger logger = Logger.getLogger(DocsMgtRmi.class); private static DocsMgtRmi rmi = null; public static DocsMgtRmi getINS() { if (rmi == null) { synchronized (DocsMgtRmi.class) { if (rmi == null) { rmi = new DocsMgtRmi(); } } } return rmi; } private DocsMgtRmi() { } public List<DefaultMutableTreeNode> getFirstLevelDirs() { ArrayList<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>(); DefaultMutableTreeNode fstnode = null; for (int i = 0; i < 10; i++) { VEachDir fstLevelDir = new VEachDir(i, "200" + i + "年以前規章", 0); fstnode = new DefaultMutableTreeNode(fstLevelDir); nodes.add(fstnode); } for (int i = 0; i < 10; i++) { VEachDir secLevelDir = new VEachDir(i, "2009年投訴建議-卷" + i, 9); DefaultMutableTreeNode secNode = new DefaultMutableTreeNode( secLevelDir); fstnode.add(secNode); } return nodes; } public List<VEachFile> getFilesViaDirid(int dirId) { ArrayList<VEachFile> files = new ArrayList<VEachFile>(); for (int i = 0; i < 97; i++) { VEachFile one = new VEachFile(dirId, "天上星,亮晶晶,那是" + i + "雙雙眼睛.txt", 1000, new Date(), "張為山", "one->two-" + i + "-<>"); files.add(one); } return files; } public boolean saveDirChanged(List<VEachDir> dirs) { return true; } }
package test; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JTree; import javax.swing.TransferHandler; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; public class DocsTreeTransferHanlder extends TransferHandler { public DocsTreeTransferHanlder() throws ClassNotFoundException { } public int getSourceActions(JComponent c) { return MOVE; } @Override protected Transferable createTransferable(JComponent c) { JTree tree = (JTree) c; TreePath[] paths = tree.getSelectionPaths(); ArrayList nodes = new ArrayList(); for (TreePath path : paths) { nodes.add(path.getLastPathComponent()); } return new JTreeTransferable(nodes); } @Override protected void exportDone(JComponent source, Transferable data, int action) { } @Override public boolean canImport(TransferSupport support) { if (support.isDataFlavorSupported(JTreeTransferable.FLAVOR)) { if (support.getDropAction() == MOVE) return true; } return false; } @Override public boolean importData(TransferSupport support) { JTree tree = (JTree) support.getComponent(); DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); Transferable transfer = support.getTransferable(); try { List<DefaultMutableTreeNode> nodes = (List<DefaultMutableTreeNode>) transfer .getTransferData(JTreeTransferable.FLAVOR); JTree.DropLocation location = (JTree.DropLocation) support .getDropLocation(); DefaultMutableTreeNode newParent = (DefaultMutableTreeNode) location .getPath().getLastPathComponent(); for (DefaultMutableTreeNode node : nodes) { model.removeNodeFromParent(node); model.insertNodeInto(node, newParent, newParent.getChildCount()); } } catch (UnsupportedFlavorException e) { e.printStackTrace(); return false; } catch (Exception e) { e.printStackTrace(); return false; } return true; } } class JTreeTransferable implements Transferable { public static DataFlavor FLAVOR = null; private List<DefaultMutableTreeNode> nodes; JTreeTransferable(ArrayList<DefaultMutableTreeNode> nodes) { try { FLAVOR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + ";class=\"" + ArrayList.class.getName() + "\""); this.nodes = nodes; } catch (Exception ex) { ex.printStackTrace(); } } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { return nodes; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { FLAVOR }; } public boolean isDataFlavorSupported(DataFlavor flv) { return FLAVOR.equals(flv); } }
package test;
import java.util.Date;
public class VEachFile {
private int dirId;
private String fileName;
private int fileSize;
private Date fileDate;
private String fileAuthor;
private String filePath;
public VEachFile(int dirId, String fileName, int fileSize, Date fileDate,
String fileAuthor, String filePath) {
super();
this.dirId = dirId;
this.fileName = fileName;
this.fileSize = fileSize;
this.fileDate = fileDate;
this.fileAuthor = fileAuthor;
this.filePath = filePath;
}
public int getDirId() {
return dirId;
}
public void setDirId(int dirId) {
this.dirId = dirId;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int getFileSize() {
return fileSize;
}
public void setFileSize(int fileSize) {
this.fileSize = fileSize;
}
public Date getFileDate() {
return fileDate;
}
public void setFileDate(Date fileDate) {
this.fileDate = fileDate;
}
public String getFileAuthor() {
return fileAuthor;
}
public void setFileAuthor(String fileAuthor) {
this.fileAuthor = fileAuthor;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}
package test;
public class VEachDir {
private int dirId;
private String dirName;
private int parentDirId;
public VEachDir(int dirId, String dirName, int parentDirId) {
super();
this.dirId = dirId;
this.dirName = dirName;
this.parentDirId = parentDirId;
}
public int getDirId() {
return dirId;
}
public void setDirId(int dirId) {
this.dirId = dirId;
}
public String getDirName() {
return dirName;
}
public void setDirName(String dirName) {
this.dirName = dirName;
}
public int getParentDirId() {
return parentDirId;
}
public void setParentDirId(int parentDirId) {
this.parentDirId = parentDirId;
}
public String toString() {
return this.dirName;
}
}