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

📄 overviewpaneaction.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
package net.sourceforge.ganttproject.chart.overview;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import java.awt.image.RenderedImage;import java.util.Date;import java.util.List;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPanel;import net.sourceforge.ganttproject.ChartComponentBase;import net.sourceforge.ganttproject.action.GPAction;import net.sourceforge.ganttproject.action.OkAction;import net.sourceforge.ganttproject.chart.BackgroundRendererImpl;import net.sourceforge.ganttproject.chart.Chart;import net.sourceforge.ganttproject.chart.ChartViewState;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.gui.zoom.ZoomManager;import net.sourceforge.ganttproject.gui.zoom.ZoomManager.ZoomState;import net.sourceforge.ganttproject.task.TaskLength;import net.sourceforge.ganttproject.task.TaskManager;import net.sourceforge.ganttproject.time.TimeUnit;import net.sourceforge.ganttproject.time.TimeUnitFunctionOfDate;import net.sourceforge.ganttproject.time.TimeUnitStack;import net.sourceforge.ganttproject.time.gregorian.GPTimeUnitStack;public class OverviewPaneAction extends GPAction {	private final UIFacade myUIFacade;	private static final int OVERVIEW_PANE_WIDTH = 600;     private static final int OVERVIEW_PANE_HEIGHT = 100; 	public OverviewPaneAction(UIFacade uiFacade) {		super("overview");		myUIFacade = uiFacade;	}		@Override	protected String getIconFilePrefix() {		// TODO Auto-generated method stub		return null;	}	public void actionPerformed(ActionEvent e) {		final Chart activeChart = myUIFacade.getActiveChart();		Action okAction = new OkAction() {			public void actionPerformed(ActionEvent e) {			}		};		//ChartComponentBase chartComponent = (ChartComponentBase) activeChart;        final GPTimeUnitStack timeunitStack = (GPTimeUnitStack) activeChart.getProject().getTimeUnitStack();        final Chart copy = activeChart.createCopy();        final Date startDate = activeChart.getProject().getTaskManager().getProjectStart();         TaskLength projectLength = activeChart.getProject().getTaskManager().getProjectLength();        if (projectLength.getLength(timeunitStack.YEAR.createTimeUnit(startDate))<1) {            projectLength = activeChart.getProject().getTaskManager().createLength(timeunitStack.YEAR.createTimeUnit(startDate), 1);        }        //ZoomState zoomState = findGoodZoomState(timeunitStack, projectLength, 600);        TimeUnit bottomUnit = timeunitStack.MONTH.createTimeUnit(startDate);//        if (bottomUnit instanceof TimeUnitFunctionOfDate) {//            bottomUnit = ((TimeUnitFunctionOfDate)bottomUnit).createTimeUnit(startDate);//        }        //TimeUnit bottomUnit = timeunitStack.WEEK_AS_BOTTOM_UNIT;        copy.setTopUnit(bottomUnit);        copy.setBottomUnit(bottomUnit);        copy.setStartDate(startDate);        copy.setDimensions(OVERVIEW_PANE_HEIGHT, OVERVIEW_PANE_WIDTH);        float projectLengthInDefaultUnits = projectLength.getLength(timeunitStack.getDefaultTimeUnit());        float bottomUnitLengthInDefaultUnits = bottomUnit.getAtomCount(timeunitStack.getDefaultTimeUnit());        copy.setBottomUnitWidth((int)(OVERVIEW_PANE_WIDTH/(projectLengthInDefaultUnits/bottomUnitLengthInDefaultUnits)));        copy.resetRenderers();        final OverviewRendererImpl overviewRenderer = new OverviewRendererImpl();        BackgroundRendererImpl backgroundRenderer = new BackgroundRendererImpl();        backgroundRenderer.setHeight(OVERVIEW_PANE_HEIGHT);        copy.addTimeUnitVisitor(backgroundRenderer);        overviewRenderer.setHeight(OVERVIEW_PANE_HEIGHT);        overviewRenderer.setStartDate(activeChart.getStartDate());        overviewRenderer.setEndDate(activeChart.getEndDate());        copy.addTimeUnitVisitor(overviewRenderer);        JPanel overviewPanel = new JPanel(new BorderLayout());        final JPanel chartPanel = new JPanel(new BorderLayout()) {            @Override            public void paintComponent(Graphics g) {                super.paintComponent(g);                copy.paintChart(g);            }        };        chartPanel.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                super.mouseClicked(e);                TaskManager taskManager = copy.getProject().getTaskManager();                 TaskLength copyLength = copy.calculateLength(e.getX());                Date result = taskManager.shift(copy.getStartDate(), copyLength);                activeChart.setStartDate(result);                overviewRenderer.setStartDate(activeChart.getStartDate());                overviewRenderer.setEndDate(activeChart.getEndDate());                chartPanel.repaint();            }        });        final JLabel dateLabel = new JLabel("Use arrow keys to scroll left/right or click the exact date");        chartPanel.addMouseMotionListener(new MouseMotionAdapter() {            @Override            public void mouseMoved(MouseEvent e) {                TaskManager taskManager = copy.getProject().getTaskManager();                 TaskLength copyLength = copy.calculateLength(e.getX());                Date currentDate = taskManager.shift(copy.getStartDate(), copyLength);                dateLabel.setText(currentDate.toLocaleString());            }        });        overviewPanel.setFocusable(true);        overviewPanel.addKeyListener(new KeyAdapter() {			@Override			public void keyPressed(KeyEvent e) {				super.keyPressed(e);				switch (e.getKeyCode()) {				case KeyEvent.VK_LEFT: {					activeChart.scrollRight();	                overviewRenderer.setStartDate(activeChart.getStartDate());	                overviewRenderer.setEndDate(activeChart.getEndDate());	                chartPanel.repaint();	                break;				}				case KeyEvent.VK_RIGHT: {					activeChart.scrollLeft();	                overviewRenderer.setStartDate(activeChart.getStartDate());	                overviewRenderer.setEndDate(activeChart.getEndDate());	                chartPanel.repaint();	                break;				}				}			}        	        });        //chartPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY, 3));        overviewPanel.add(dateLabel, BorderLayout.NORTH);        overviewPanel.add(chartPanel, BorderLayout.CENTER);        overviewPanel.setBorder(BorderFactory.createEtchedBorder());        overviewPanel.setPreferredSize(new Dimension(OVERVIEW_PANE_WIDTH, OVERVIEW_PANE_HEIGHT));        		myUIFacade.showUndecoratedDialog(overviewPanel,new Action[] {okAction});	}        private ZoomState findGoodZoomState(TimeUnitStack timeUnitStack, TaskLength projectLength, int chartWidth) {        List<ZoomManager.ZoomState> zoomStates = ZoomManager.calculateZoomStates(timeUnitStack);        for (ZoomState nextState : zoomStates) {            float unitsCount = chartWidth/nextState.getBottomUnitWidth();            if (!projectLength.getTimeUnit().isConstructedFrom(nextState.getTimeUnitPair().getTopTimeUnit())) {                continue;            }            if (projectLength.getLength(nextState.getTimeUnitPair().getTopTimeUnit())<unitsCount) {                return nextState;            }        }        return zoomStates.get(zoomStates.size()-1);    }}

⌨️ 快捷键说明

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