📄 gantttreetable.java
字号:
package net.sourceforge.ganttproject;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Point;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusAdapter;import java.awt.event.FocusEvent;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.text.ParseException;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Date;import java.util.Enumeration;import java.util.EventListener;import java.util.EventObject;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import javax.swing.Action;import javax.swing.ActionMap;import javax.swing.DefaultCellEditor;import javax.swing.ImageIcon;import javax.swing.InputMap;import javax.swing.JCheckBoxMenuItem;import javax.swing.JComponent;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.JTree;import javax.swing.KeyStroke;import javax.swing.SwingConstants;import javax.swing.SwingUtilities;import javax.swing.event.CellEditorListener;import javax.swing.event.ChangeEvent;import javax.swing.event.ListSelectionEvent;import javax.swing.event.TableColumnModelEvent;import javax.swing.event.TableColumnModelListener;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;import javax.swing.event.TreeModelEvent;import javax.swing.event.TreeModelListener;import javax.swing.table.DefaultTableColumnModel;import javax.swing.table.TableCellEditor;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import javax.swing.text.JTextComponent;import javax.swing.tree.TreePath;import net.sourceforge.ganttproject.delay.Delay;import net.sourceforge.ganttproject.gui.GanttDialogCustomColumn;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.language.GanttLanguage.Event;import net.sourceforge.ganttproject.language.GanttLanguage.Listener;import net.sourceforge.ganttproject.task.CustomColumn;import net.sourceforge.ganttproject.task.CustomColumnsException;import net.sourceforge.ganttproject.task.CustomColumnsManager;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.TaskContainmentHierarchyFacade;import net.sourceforge.ganttproject.task.TaskNode;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;/** * Treetable used to displayed tabular data and hierarchical data. * * @author bbaranne * @version 1.0 (20050301) (yyyymmdd) */public class GanttTreeTable extends GPTreeTableBase implements GanttLanguage.Listener { /** * Unique instance of GanttLanguage. */ private static GanttLanguage language = GanttLanguage.getInstance(); /** * PopupMenu showed on right click (window, linux) on the table header. */ private JPopupMenu popupMenu; /** * Map ColumnName -> MenuItem */ private Map mapColNameMenuItem; /** * Point where the user has just right clicked on the table header. */ private Point clickPoint = null; /** * model of the treetable. */ private final GanttTreeTableModel ttModel; /** * stores the tableColum associated with there ColumnKeeper. it is used to * retore the column at the same index it has been removed. */ private final Map mapTableColumnColumnKeeper = new LinkedHashMap(); /** * Menu item to delete columns. */ private JMenuItem jmiDeleteColumn; DisplayedColumnsList listDisplayedColumns = null; private Listener myLanguageListener; /** * Creates an instance of GanttTreeTable with the given TreeTableModel. * * @param model * TreeTableModel. */ public GanttTreeTable(GanttTreeTableModel model) { super(model); GanttLanguage.getInstance().addListener(this); initTreeTable(); this.ttModel = model; } void setAction(Action action) { addAction(action, (KeyStroke) action.getValue(Action.ACCELERATOR_KEY)); // Add the action to the component } void addAction(Action action, KeyStroke keyStroke) { InputMap inputMap = getInputMap(); inputMap.put(keyStroke, action.getValue(Action.NAME)); getActionMap().put(action.getValue(Action.NAME), action); } private void updateDisplayedColumnsOrder() { Iterator it = this.listDisplayedColumns.iterator(); while (it.hasNext()) { DisplayedColumn dc = (DisplayedColumn) it.next(); if (dc.isDisplayed()) { String id = dc.getID(); String name = getNameForId(id); int viewIndex = getTable().convertColumnIndexToView( getColumn(name).getModelIndex()); dc.setOrder(viewIndex); dc.setWidth(getColumn(name).getPreferredWidth()); } } } public DisplayedColumnsList getDisplayColumns() { updateDisplayedColumnsOrder(); return this.listDisplayedColumns; } public void setDisplayedColumns(DisplayedColumnsList displayedColumns) { DisplayedColumnsList l = (DisplayedColumnsList) displayedColumns .clone(); if (displayedColumns.size() != 0) { this.listDisplayedColumns = displayedColumns; displayAllColumns(); hideAllColumns(); this.listDisplayedColumns = l; } Collections.sort(this.listDisplayedColumns); Iterator it = this.listDisplayedColumns.iterator(); while (it.hasNext()) { DisplayedColumn dc = (DisplayedColumn) it.next(); String id = dc.getID(); String name = getNameForId(id); if (dc.displayed) displayColumn(name); else hideColumn(name); } } void reloadColumns() { List columns = Collections.list(getTable().getColumnModel() .getColumns()); for (int i = 0; i < columns.size(); i++) { getTable().removeColumn((TableColumn) columns.get(i)); } if (myLanguageListener != null) { GanttLanguage.getInstance().removeListener(myLanguageListener); } final TableColumnExt tce1 = new TableColumnExt(0); final TableColumnExt tce2 = new TableColumnExt(1); final TableColumnExt tce3 = new TableColumnExt(2); final TableColumnExt tce4 = new TableColumnExt(3); final TableColumnExt tce5 = new TableColumnExt(4); final TableColumnExt tce6 = new TableColumnExt(5); final TableColumnExt tce7 = new TableColumnExt(6); final TableColumnExt tce8 = new TableColumnExt(7); final TableColumnExt tce9 = new TableColumnExt(8); final TableColumnExt tce10 = new TableColumnExt(9); final TableColumnExt tce11 = new TableColumnExt(10); final TableColumnExt tce12 = new TableColumnExt(11); final TableColumnExt tce13 = new TableColumnExt(12); myLanguageListener = new GanttLanguage.Listener() { public void languageChanged(Event event) { GanttTreeTable.this.ttModel.languageChanged(event); tce1.setTitle(GanttTreeTableModel.strColType); tce2.setTitle(GanttTreeTableModel.strColPriority); tce3.setTitle(GanttTreeTableModel.strColInfo); tce4.setTitle(GanttTreeTableModel.strColName); tce5.setTitle(GanttTreeTableModel.strColBegDate); tce6.setTitle(GanttTreeTableModel.strColEndDate); tce7.setTitle(GanttTreeTableModel.strColDuration); tce8.setTitle(GanttTreeTableModel.strColCompletion); tce9.setTitle(GanttTreeTableModel.strColCoordinator); tce10.setTitle(GanttTreeTableModel.strColPredecessors); tce11.setTitle(GanttTreeTableModel.strColID); tce12.setTitle(GanttTreeTableModel.strAssignments); tce13.setTitle(GanttTreeTableModel.strColLineNumber); } }; GanttLanguage.getInstance().addListener(myLanguageListener); this.addColumn(tce1); this.addColumn(tce2); this.addColumn(tce3); this.addColumn(tce4); this.addColumn(tce5); this.addColumn(tce6); this.addColumn(tce7); this.addColumn(tce8); this.addColumn(tce9); this.addColumn(tce10); this.addColumn(tce11); this.addColumn(tce12); this.addColumn(tce13); { listDisplayedColumns = new DisplayedColumnsList(); // Type DisplayedColumn dc1 = new DisplayedColumn(getIdForName(tce1 .getTitle())); dc1.setDisplayed(false); dc1.setOrder(this.getTable().convertColumnIndexToView( tce1.getModelIndex())); dc1.setWidth(tce1.getPreferredWidth()); listDisplayedColumns.add(dc1); // Priority DisplayedColumn dc2 = new DisplayedColumn(getIdForName(tce2 .getTitle())); dc2.setDisplayed(false); dc2.setOrder(this.getTable().convertColumnIndexToView( tce2.getModelIndex())); dc2.setWidth(tce2.getPreferredWidth()); listDisplayedColumns.add(dc2); // Info DisplayedColumn dc3 = new DisplayedColumn(getIdForName(tce3 .getTitle())); dc3.setDisplayed(false); dc3.setOrder(this.getTable().convertColumnIndexToView( tce3.getModelIndex())); dc3.setWidth(tce3.getPreferredWidth()); listDisplayedColumns.add(dc3); // Name DisplayedColumn dc4 = new DisplayedColumn(getIdForName(tce4 .getTitle())); dc4.setDisplayed(true); dc4.setOrder(this.getTable().convertColumnIndexToView( tce4.getModelIndex())); dc4.setWidth(tce4.getPreferredWidth()); listDisplayedColumns.add(dc4); // Begin date DisplayedColumn dc5 = new DisplayedColumn(getIdForName(tce5 .getTitle())); dc5.setDisplayed(true); dc5.setOrder(this.getTable().convertColumnIndexToView( tce5.getModelIndex())); dc5.setWidth(tce5.getPreferredWidth()); listDisplayedColumns.add(dc5); // End date DisplayedColumn dc6 = new DisplayedColumn(getIdForName(tce6 .getTitle())); dc6.setDisplayed(true); dc6.setOrder(this.getTable().convertColumnIndexToView( tce6.getModelIndex())); dc6.setWidth(tce6.getPreferredWidth()); listDisplayedColumns.add(dc6); // Duration DisplayedColumn dc7 = new DisplayedColumn(getIdForName(tce7 .getTitle())); dc7.setDisplayed(false); dc7.setOrder(this.getTable().convertColumnIndexToView( tce7.getModelIndex())); dc7.setWidth(tce7.getPreferredWidth()); listDisplayedColumns.add(dc7); // Completion DisplayedColumn dc8 = new DisplayedColumn(getIdForName(tce8 .getTitle())); dc8.setDisplayed(false); dc8.setOrder(this.getTable().convertColumnIndexToView( tce8.getModelIndex())); dc8.setWidth(tce8.getPreferredWidth()); listDisplayedColumns.add(dc8); // Coordinator DisplayedColumn dc9 = new DisplayedColumn(getIdForName(tce9 .getTitle())); dc9.setDisplayed(false); dc9.setOrder(this.getTable().convertColumnIndexToView( tce9.getModelIndex())); dc9.setWidth(tce9.getPreferredWidth()); listDisplayedColumns.add(dc9); // Predecessors DisplayedColumn dc10 = new DisplayedColumn(getIdForName(tce10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -