📄 resourcetreetable.java
字号:
package net.sourceforge.ganttproject;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Point;import java.awt.Toolkit;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.text.ParseException;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Enumeration;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Vector;import javax.swing.Action;import javax.swing.DefaultCellEditor;import javax.swing.ImageIcon;import javax.swing.InputMap;import javax.swing.JComboBox;import javax.swing.JCheckBox;import javax.swing.JComponent;import javax.swing.JPopupMenu;import javax.swing.JScrollBar;import javax.swing.JTable;import javax.swing.JTree;import javax.swing.KeyStroke;import javax.swing.SwingConstants;import javax.swing.SwingUtilities;import javax.swing.event.TreeExpansionEvent;import javax.swing.event.TreeExpansionListener;import javax.swing.table.TableColumn;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.TreePath;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JTextField;import javax.swing.AbstractAction;import net.sourceforge.ganttproject.gui.ResourceDialogCustomColumn;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.resource.HumanResource;import net.sourceforge.ganttproject.resource.ProjectResource;import net.sourceforge.ganttproject.resource.ResourceNode;import net.sourceforge.ganttproject.resource.ResourceColumn;import net.sourceforge.ganttproject.roles.Role;import net.sourceforge.ganttproject.roles.RoleManager;import net.sourceforge.ganttproject.roles.RoleManager.RoleEvent;import net.sourceforge.ganttproject.util.DateUtils;import org.jdesktop.jdnc.JNTreeTable;import org.jdesktop.swing.decorator.AlternateRowHighlighter;import org.jdesktop.swing.decorator.HierarchicalColumnHighlighter;import org.jdesktop.swing.decorator.Highlighter;import org.jdesktop.swing.decorator.HighlighterPipeline;import org.jdesktop.swing.table.TableColumnExt;import org.jdesktop.swing.treetable.TreeTableModel;public class ResourceTreeTable extends GPTreeTableBase { private RoleManager myRoleManager; /** * Unique instance of GanttLanguage. */ private static GanttLanguage language = GanttLanguage.getInstance(); /** * the treetable data model */ private ResourceTreeTableModel ttModel; /** * PopupMenu showed on right click on the table header. */ private JPopupMenu popupMenu = null; /** Component used to delete a custom column */ JMenuItem delColumnItem = null; /** Position where the user clicked on the table header */ private Point clickPoint = null; /** number of visible columns */ private static int colCount = 0; /** * Creates an instance of GanttTreeTable with the given TreeTableModel. * * @param model * TreeTableModel. */ public ResourceTreeTable(TreeTableModel model) { super(model); ttModel = (ResourceTreeTableModel) model; this.setTreeTableModel(model); initTreeTable(); } public boolean isVisible(DefaultMutableTreeNode node) { return this.getTreeTable().getTree().isVisible( new TreePath(node.getPath())); } public void setRowHeight(int rowHeight) { super.setRowHeight(rowHeight); } /** * Initialize the treetable. Addition of various listeners, tree's icons, */ public void initTreeTable() { // ttModel = (ResourceTreeTableModel) this.getTreeTableModel(); Enumeration enumeration = getTable().getColumnModel().getColumns(); Collection lToDel = new ArrayList(); while (enumeration.hasMoreElements()) { TableColumnExt tc = (TableColumnExt) enumeration.nextElement(); lToDel.add(tc); } Iterator it = lToDel.iterator(); while (it.hasNext()) getTable().removeColumn((TableColumn) it.next()); getTable().setAutoCreateColumnsFromModel(false); getTable().setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); TableColumnExt tce1 = new TableColumnExt(0); tce1.setTitle(ResourceTreeTableModel.strResourceName); TableColumnExt tce2 = new TableColumnExt(1); tce2.setTitle(ResourceTreeTableModel.strResourceRole); TableColumnExt tce3 = new TableColumnExt(2); tce3.setTitle(ResourceTreeTableModel.strResourceEMail); TableColumnExt tce4 = new TableColumnExt(3); tce4.setTitle(ResourceTreeTableModel.strResourcePhone); TableColumnExt tce5 = new TableColumnExt(4); tce5.setTitle(ResourceTreeTableModel.strResourceRoleForTask); TableColumnExt tce6 = new TableColumnExt(5); tce6.setTitle(ResourceTreeTableModel.strResourceID); TableColumnExt tce7 = new TableColumnExt(6); tce7.setTitle(ResourceTreeTableModel.strResourceLineNumber); /* adding the columns on the screen and to the data model */ this.addMandatoryColumn(new ResourceColumn(tce1, ttModel.useNextIndex(), String.class)); this.addMandatoryColumn(new ResourceColumn(tce2, ttModel.useNextIndex(), String.class)); this.addMandatoryColumn(new ResourceColumn(tce3, ttModel.useNextIndex(), String.class)); this.addMandatoryColumn(new ResourceColumn(tce4, ttModel.useNextIndex(), String.class)); this.addMandatoryColumn(new ResourceColumn(tce5, ttModel.useNextIndex(), String.class)); this.addMandatoryColumn(new ResourceColumn(tce6, ttModel.useNextIndex(), Integer.class)); // It adds the line number column // which is not ticked in the popup menu (false). ResourceColumn LineNumberResCol = new ResourceColumn(tce7, ttModel.useNextIndex(), String.class, false); this.addMandatoryColumn(LineNumberResCol); // hides the line number column hideColumn(LineNumberResCol); initColumnsAlignements(); ArrayList cols = ttModel.getColumns(); for (int i=2; i<cols.size(); i++) { hideColumn((ResourceColumn) cols.get(i)); } // Highlighters to ease the reading of the table. setHighlighters(new HighlighterPipeline(new Highlighter[] { AlternateRowHighlighter.quickSilver, new HierarchicalColumnHighlighter() })); setShowHorizontalLines(true); setHasColumnControl(true); ImageIcon icon = new ImageIcon(getClass().getResource( "/icons/simple_task.gif")); setOpenIcon(icon); setClosedIcon(icon); setCollapsedIcon(new ImageIcon(getClass() .getResource("/icons/plus.gif"))); setExpandedIcon(new ImageIcon(getClass() .getResource("/icons/minus.gif"))); setLeafIcon(icon); this.getTreeTable().getParent().setBackground(Color.WHITE); setUpRolesRenderer(); setUpAssignementRolesRenderer(); // getTable().getTableHeader().addMouseListener(new MouseListener(){ // // public void mouseClicked(MouseEvent arg0) { // // TODO Auto-generated method stub // // } // // public void mousePressed(MouseEvent arg0) { // // TODO Auto-generated method stub // // } // // public void mouseReleased(MouseEvent e) { // Enumeration en = getTable().getColumnModel().getColumns(); // while(en.hasMoreElements()) // { // TableColumn tc = (TableColumn)en.nextElement(); // tc.setPreferredWidth(tc.getWidth()); // } // } // // public void mouseEntered(MouseEvent arg0) { // // TODO Auto-generated method stub // // } // // public void mouseExited(MouseEvent arg0) { // // TODO Auto-generated method stub // // } // // }); this.getTreeTable().getTree().addTreeExpansionListener( new TreeExpansionListener() { public void treeExpanded(TreeExpansionEvent arg0) { Mediator.getGanttProjectSingleton().repaint2(); } public void treeCollapsed(TreeExpansionEvent arg0) { Mediator.getGanttProjectSingleton().repaint2(); } }); this.setPreferredSize(new Dimension(this.getPreferredSize().width, 0)); /* listener provoking the popup menu for the column management */ this.getTable().getTableHeader().addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { handlePopupTrigger(e); } public void mouseReleased(MouseEvent e) { handlePopupTrigger(e); } private void handlePopupTrigger(MouseEvent e) { if (e.isPopupTrigger()) { clickPoint = e.getPoint(); String name = getTable().getColumnName( getTable().columnAtPoint(clickPoint)); createPopup(); /* the delete button is activated only for removable columns */ if (ttModel.checkRemovableCol(name)) delColumnItem.setEnabled(true); else delColumnItem.setEnabled(false); Component c = (Component) e.getSource(); popupMenu.show(c, e.getX(), e.getY()); } } }); } /* creates the popup menu for the column management */ private void createPopup() { popupMenu = new JPopupMenu(); /* show columns list */ ArrayList cols = ttModel.getColumns(); ResourceColumn col; int size = cols.size(); for (int i = 0; i < size; i++) { col = (ResourceColumn) cols.get(i); JCheckBoxMenuItem item = new JCheckBoxMenuItem(col.getTitle(), col .isVisible()); item.addActionListener(new ColumnHandler(col)); popupMenu.add(item); } popupMenu.addSeparator(); /* 'display all columns' button */ JMenuItem showAllItem = new JMenuItem(language.getText("displayAll")); showAllItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { /* TODO the undo management */ Mediator.getGanttProjectSingleton().getUndoManager() .undoableEdit("displayAllColumns", new Runnable() { public void run() { /* sets all the columns visible */ ArrayList cols = ttModel.getColumns(); ResourceColumn col; int size = cols.size(); for (int i = 0; i < size; i++) { col = (ResourceColumn) cols.get(i); if (!col.isVisible()) { col.setVisible(true); showColumn(col); } } Mediator.getGanttProjectSingleton() .setAskForSave(true); } }); } }); popupMenu.add(showAllItem);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -