首先来看一下展示界面,JTree 的特点有:节点可拖拽,根据输入生成目录,右键有菜单,点击触发事件等
JTable 的特点有:含有隐藏列,可以进行翻页,列中含有下载按钮等
在来看一下代码吧,基本代码由 Eclipse 上的 WindowBuilder 进行拖拽式产生的,所以看起来有点乱,不过没事
在使用 WindowBuilder 的时候要画 JTree 和 JTable 时要注意,这两个有几个共同点,必须放到 JScrollPanel 中,因为这两个控件的内容长度会发生突然变化,
所以要使用 JScrollPanel。
BTW:如果要使用 WindowBuidler,除了在 Eclipse 上安装插件,最方便的方法是直接下载含有该插件的 Eclipse 版本:
http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/keplerr
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);