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

📄 tasktreeimagegenerator.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
package net.sourceforge.ganttproject;import java.awt.Color;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.Stack;import javax.swing.tree.DefaultMutableTreeNode;import net.sourceforge.ganttproject.font.Fonts;import net.sourceforge.ganttproject.gui.UIConfiguration;import net.sourceforge.ganttproject.task.BlankLineNode;import net.sourceforge.ganttproject.task.Task;class TaskTreeImageGenerator {    private GanttTree2 myTreeView;    private UIConfiguration myUIConfiguration;    private int myWidth;    TaskTreeImageGenerator(GanttTree2 treeView, UIConfiguration uiConfiguration) {        myTreeView = treeView;        myUIConfiguration = uiConfiguration;            }        private GanttTree2 getTree() {        return myTreeView;    }        List getPrintableNodes(GanttExportSettings settings) {        List myItemsToConsider;        if (settings.isOnlySelectedItem()) {            myItemsToConsider = Arrays.asList(getTree().getSelectedNodes());        }        else {            myItemsToConsider = getTree().getAllVisibleNodes();        }        System.out.println("TaskToConsider.size = " + myItemsToConsider.size());        for (int i = 0; i < myItemsToConsider.size(); i++) {            if (((DefaultMutableTreeNode) myItemsToConsider.get(i)).isRoot()) {                myItemsToConsider.remove(i);                break;            }        }        return myItemsToConsider;            }    Image createImage(List myItemsToConsider) {        BufferedImage tmpImage = new BufferedImage(10, 10,                BufferedImage.TYPE_INT_RGB);        FontMetrics fmetric = tmpImage.getGraphics().getFontMetrics(        myUIConfiguration.getChartMainFont().deriveFont(12f));                        //calculate task table size        int width = 0;        //add title row height ? bing.png image height        int height = getTree().getTreeTable().getRowHeight()*3 + HEADER_OFFSET;        for (Iterator tasks = myItemsToConsider.iterator(); tasks.hasNext();) {            DefaultMutableTreeNode nextTreeNode = (DefaultMutableTreeNode) tasks                    .next();            if (nextTreeNode instanceof BlankLineNode) {                height += getTree().getTreeTable().getRowHeight();                continue;            }            Task next = (Task) nextTreeNode.getUserObject();            if ("None".equals(next.toString())) {                continue;            }            if (isVisible(next)) {                height += getTree().getTreeTable().getRowHeight();                //update width if the width of the name is greater than current width                int nbchar = fmetric.stringWidth(next.getName());                if (nbchar > width) {                    width = nbchar;                }            }        }        //add space to make it nicer ?        width += 50;        myWidth = width;                BufferedImage image2 = new BufferedImage(width, height,                BufferedImage.TYPE_INT_RGB);        // setSize(sizeTOC, getHeight());        Graphics g2 = image2.getGraphics();        ((Graphics2D) g2).setRenderingHint(                RenderingHints.KEY_TEXT_ANTIALIASING,                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);        g2.setColor(Color.WHITE);        g2.fillRect(0, 0, width, height);        printTasks(g2, myItemsToConsider);                GanttImagePanel but = new GanttImagePanel("big.png", 300, 47);        g2.setColor(new Color(102, 153, 153));        g2.fillRect(0,0, width, but.getHeight());        but.paintComponent(g2);                return image2;    }        private int getWidth() {        return myWidth;    }        private void printTasks(Graphics g, List taskNodes) {        g.setColor(Color.black);        // g.setFont(myUIConfiguration.getChartMainFont().deriveFont(12f));        g.setFont(Fonts.PRINT_CHART_FONT);        // JA Changed 42 to 66        // This is related to the hardcoded headerheight        // TODO: Fix hard-coded part        // printTask(g,5,66,getTree().getAllChildTask(getTree().getRoot()));        printTask(g,taskNodes);    }    private int printTask(Graphics g, List child) {        int rowCount=0;        final int h = getTree().getTreeTable().getRowHeight();        Stack nestingStack = new Stack();        //int x = 5;        int y = getTree().getTable().getTableHeader().getHeight()        + HEADER_OFFSET;        for (Iterator tasks = child.iterator(); tasks.hasNext();) {            DefaultMutableTreeNode nextTreeNode = (DefaultMutableTreeNode) tasks                    .next();            boolean blankline = nextTreeNode instanceof BlankLineNode;            Task next = null;            if (!blankline) {                next = (Task) nextTreeNode.getUserObject();                while (!nestingStack.isEmpty()) {                	DefaultMutableTreeNode topStackNode = (DefaultMutableTreeNode) nestingStack.pop();                	if (nextTreeNode.getParent()==topStackNode) {                		nestingStack.push(topStackNode);                		break;                	}                }        		nestingStack.push(nextTreeNode);            }            if (blankline || isVisible(next)) {                if (rowCount % 2 == 1) {                    g.setColor(new Color((float) 0.933, (float) 0.933,                            (float) 0.933));                    g.fillRect(0, y, getWidth() - h / 2, h);                }                g.setColor(Color.black);                g.drawRect(0, y, getWidth() - h / 2, h);                if (!blankline) {                    int charH = (int) g.getFontMetrics().getLineMetrics(                            next.getName(), g).getAscent();                    int x = nestingStack.size()*5;                    g.drawString(next.getName(), x, y + charH                                    + (h - charH) / 2);                }                g.setColor(new Color((float) 0.807, (float) 0.807,                        (float) 0.807));                g.drawLine(1, y + 19, getWidth() - 11, y + 19);                y += h;                rowCount++;                // if (nextTreeNode.getChildCount() != 0) {                // y = printTask(g, x + (h / 2), y, getTree().getAllChildTask(                // nextTreeNode));                // }            }        }        return y;    }            private boolean isVisible(Task thetask) {        boolean res = true;        DefaultMutableTreeNode father = getTree().getFatherNode(thetask);        if (father == null) {            return false;        }        while (father != null) {            Task taskFather = (Task) (father.getUserObject());            if (!taskFather.getExpand()) {                res = false;            }            father = (DefaultMutableTreeNode) (father.getParent());        }        return res;    }        private static final int HEADER_OFFSET = 44;    }

⌨️ 快捷键说明

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