⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 header.java

📁 Owing to the applet Gantt chart source yard, already Chinese melt, Gantt chart can demonstrate a Chi
💻 JAVA
字号:
/** *   Copyright 2004 Carlos Silva A. *  *   Licensed under the Apache License, Version 2.0 (the "License"); *   you may not use this file except in compliance with the License.  *   You may obtain a copy of the License at   *  *   http://www.apache.org/licenses/LICENSE-2.0 *  *   Unless required by applicable law or agreed to in writing, software *   distributed under the License is distributed on an "AS IS" BASIS, *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *   See the License for the specific language governing permissions and *   limitations under the License. *  */package jgantt.view.gantt;import java.awt.AWTEvent;import java.awt.Dimension;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Insets;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.JCheckBoxMenuItem;import javax.swing.JComponent;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import jgantt.model.DateOrganizer;import jgantt.model.GraphColors;import jgantt.model.ViewOptions;import jgantt.view.adapters.ProjectViewModel;import jgantt.view.adapters.ProjectViewModelChange;import jgantt.view.adapters.ProjectViewModelListener;/** * Header representa la cabecera de la carta gantt. *  * <p> * $Date: 2005/06/12 09:53:03 $ * </p> *  * @version $Revision: 1.20 $ * @author {user} */public class Header extends JComponent implements ProjectViewModelListener,		ViewOptions.Observer {	private static final long serialVersionUID = 3546076977803966519L;	ProjectViewModel pvModel = null;	ViewOptions viewOptions = null;	/**	 * Constructor	 * 	 * @param model	 *            modelo del proyecto	 * @param vo	 *            Opciones de visualizacion	 */	public Header(ProjectViewModel pvm) {		super();		assignViewModel(pvm);		pvModel.addListener(this);		// setBackground(graphColors.background);		setOpaque(true);		setPreferredSize(new Dimension(1200, viewOptions.headerHeight));		enableEvents(AWTEvent.MOUSE_EVENT_MASK);	}	/**	 * Pintado de la imagen header con divisiones mayores y menores.	 */	public void paintComponent(Graphics g) {		super.paintComponent(g);		paintComponent(g, getBounds());	}	/**	 * Funcion de pintado de apoyo (sirve tambien para generar imagenes).	 * 	 * @param g	 * @param bounds	 */	public void paintComponent(Graphics g, Rectangle bounds) {		super.paintComponent(g);		GraphColors graphColors = pvModel.getProject().getGraphColors();		Rectangle mayorBounds = new Rectangle(bounds);		Rectangle minorBounds = new Rectangle();		int x, y;		g.setFont(viewOptions.divFont);		g.setFont(new Font("宋体", 0, 12));		Insets titles = new Insets(0, 0, viewOptions.headerHeight, bounds.width);		int divHeight = viewOptions.divHeight;		int divWidth = viewOptions.divWidth;		// fondo		g.setColor(graphColors.titleBg);		g.fillRect(mayorBounds.x, mayorBounds.y, mayorBounds.width,				mayorBounds.height);		// linea intermedia		g.setColor(graphColors.titleFg);		g.drawLine(mayorBounds.x, mayorBounds.y + divHeight, mayorBounds.width				+ mayorBounds.x, mayorBounds.y + divHeight);		// minor divisions		g.setColor(graphColors.titleFg);		y = titles.top + divHeight;		java.util.Calendar c = java.util.Calendar.getInstance();		c.setTime(viewOptions.startDate);		int visibleDivs = 1 + (int) (bounds.width / divWidth);		for (int i = 0; i < visibleDivs; i++) {			x = titles.left + viewOptions.divX[i];			g.drawLine(x, y, x, titles.bottom);		}		// minor labels		g.setColor(graphColors.text);		y = titles.top + divHeight;		String labels[];		if (viewOptions.minDivFormat == java.util.Calendar.DAY_OF_WEEK)			labels = ViewOptions.dayNameLabels;		else			labels = ViewOptions.numberLabels;		int delta = 0;		// Logger.log(5,"visibleDivs="+visibleDivs);		FontMetrics fm = g.getFontMetrics();		for (int i = 0; i < visibleDivs; i++) {			x = titles.left + viewOptions.divX[i];			c.setTime(new Date(viewOptions.divTimes[i]));			int d = c.get(viewOptions.minDivFormat);			String toPrint = labels[d];			int w = fm.stringWidth(toPrint);			int dx = 1 + (int) ((viewOptions.divWidth - w) / 2);			g.drawString(toPrint, x + dx, y + divHeight - 2);		}		// mayor divisions preamble		// truncar la fecha de partida a la unidad mayor		c.setTime(viewOptions.startDate);		switch (viewOptions.majDivUnit) {		case java.util.Calendar.WEEK_OF_YEAR:			c.set(java.util.Calendar.DAY_OF_WEEK, 2);			break;		case java.util.Calendar.MONTH:			c.set(java.util.Calendar.DATE, 1);		}		g.setFont(viewOptions.stdFont);		g.setFont(new Font("宋体", 0, 12));		// major divisions & labels		y = titles.top;		;		SimpleDateFormat majFormat = new SimpleDateFormat(				viewOptions.majDivFormat);		for (x = titles.left; x <= (titles.right + divWidth);) {			Date d = c.getTime();			long t = d.getTime();			x = titles.left					+ (int) ((t - viewOptions.t0) / viewOptions.msPixel);			// division mayor			g.setColor(graphColors.titleFg);			g.drawLine(x, y, x, titles.bottom - divHeight);			// texto division mayor			g.setColor(graphColors.text);			String toPrint = majFormat.format(c.getTime());			g.drawString(toPrint, x + 5, y + divHeight - 3);			c.add(viewOptions.majDivUnit, viewOptions.majDivMult);		}		g.setColor(graphColors.titleFg);		g.drawLine(0, bounds.height - 1, bounds.width, bounds.height - 1);	}	/**	 * Eventos del modelo	 * 	 * @see jgantt.view.adapters.ProjectViewModelListener#projectChanged(jgantt.view.adapters.ProjectViewModelChange)	 */	public void viewModelChanged(ProjectViewModelChange c) {		if (c.getId() == ProjectViewModelChange.NEW_PROJECT_LOADED)			assignViewModel(c.getProjectViewModel());	}	/**	 * 	 */	public void assignViewModel(ProjectViewModel pvm) {		if (viewOptions != null)			viewOptions.removeObserver(this);		pvModel = pvm;		viewOptions = pvm.getProject().getViewOptions();		viewOptions.addObserver(this);	}	/**	 * Repinta la ventana cuando cambian opciones de visualizacion	 * 	 */	public void viewOptionsChanged() {		repaint();	}	public void paintHeader(Graphics g, Rectangle r) {		paintComponent(g, r);	}	class DateActionListener implements ActionListener {		public void actionPerformed(ActionEvent ev) {			String ac = ev.getActionCommand();			if (!(ev.getSource() instanceof JMenuItem))				return;			JMenuItem mi = (JMenuItem) ev.getSource();			Date dia = new Date(Long.parseLong(ac));			DateOrganizer dOrg = pvModel.getProject().getDateOrganizer();			dOrg.setLaborable(dia, mi.isSelected());			/*			 * if (mi.isSelected()) { dOrg.removeHoliday(dia); } else {			 * dOrg.addHoliday(dia); }			 */			// forzar un repaint			pvModel.getProject().forceRecalc();		}	}	/**	 * Mostrar menu para definir feriados....	 */	protected void processMouseEvent(MouseEvent ev) {		super.processMouseEvent(ev);		if (ev.getID() == MouseEvent.MOUSE_PRESSED) {			if ((ev.getModifiers() & MouseEvent.BUTTON3_MASK) > 0) {				Point p = ev.getPoint();				if (p.y > viewOptions.divHeight) { // click en un dia					Date dia = new Date(viewOptions.t0 + viewOptions.msPixel							* p.x);					JPopupMenu popup = new JPopupMenu("Data Change");					ActionListener al = new DateActionListener();					SimpleDateFormat sdf = new SimpleDateFormat(							viewOptions.dateFormat);					popup.add(new JMenuItem(sdf.format(dia)));					JCheckBoxMenuItem mi = new JCheckBoxMenuItem("Laborable");					DateOrganizer dOrg = pvModel.getProject()							.getDateOrganizer();					mi.setSelected(dOrg.isLaborable(dia));					mi.setActionCommand(String.valueOf(dia.getTime()));					mi.addActionListener(al);					popup.add(mi);					add(popup);					popup.show(this, p.x, p.y);				}			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -