FlexGantt is the most advanced Gantt charting solution currently available for Java. FlexGantt uses a very high abstraction level, which allows it to be applied in various and often very different domains such as ERP systems, production planning and scheduling applications, manufacturing execution systems or project portfolio managment applications. This is what makes FlexGantt stand out from other Gantt charting libraries, which are usually limited to project planning (resources, people, tasks).
* 關(guān)于本產(chǎn)品的分類與介紹僅供參考,精準(zhǔn)產(chǎn)品資料以介紹為準(zhǔn),如需購(gòu)買請(qǐng)先行測(cè)試。
甘特圖在行業(yè)中的典型應(yīng)用
應(yīng)用于磁電/裝備制造/食品工業(yè)/建筑等行業(yè)
計(jì)劃排程與執(zhí)行監(jiān)控
計(jì)劃排程與執(zhí)行監(jiān)控
在APS系統(tǒng)當(dāng)中,運(yùn)用甘特圖實(shí)現(xiàn)生產(chǎn)任務(wù)層級(jí)關(guān)系及生產(chǎn)計(jì)劃與實(shí)際執(zhí)行情況的實(shí)時(shí)比對(duì)效果
了解更多
原料/人力資源調(diào)度
原料/人力資源調(diào)度
在資源調(diào)度系統(tǒng)當(dāng)中,利用甘特圖實(shí)現(xiàn)任務(wù)自由拖動(dòng)及資源負(fù)荷的實(shí)時(shí)動(dòng)態(tài)計(jì)算效果
了解更多
復(fù)雜條件下的資源優(yōu)化
復(fù)雜條件下的資源優(yōu)化
在資源調(diào)度系統(tǒng)當(dāng)中,應(yīng)用甘特圖實(shí)現(xiàn)任務(wù)關(guān)聯(lián)關(guān)系,任務(wù)約束及執(zhí)行狀態(tài)的監(jiān)控效果
了解更多
建筑項(xiàng)目管理
建筑項(xiàng)目管理
在項(xiàng)目管理當(dāng)中,應(yīng)用甘特圖實(shí)現(xiàn)圖形與數(shù)據(jù)聯(lián)動(dòng)的聚光燈效果
了解更多
分屏/雙甘特圖:
幾乎所有計(jì)劃和調(diào)度程序都需要在水平卷動(dòng)時(shí)保持兩個(gè)不同模型或同一模型內(nèi)兩個(gè)不同部分的數(shù)據(jù)一致。FlexGantt 框架包括一個(gè)雙甘特圖可以實(shí)現(xiàn)上述目標(biāo)。用戶可以在任何時(shí)間分割/取消分割甘特圖。水平分割線能用于調(diào)整上下兩部分大小。時(shí)間線對(duì)象可以從一個(gè)拖至另一個(gè)。
模型視圖控制器:
FlexGantt 遵從與 Swing 相同 MVC 方法。許多不同的模型用于各種各樣的用途。一個(gè)日歷模型跟蹤假日和周末。一個(gè)頁(yè)面模型支持使用者加載不同的計(jì)劃范圍,一個(gè)書簽?zāi)P痛鎯?chǔ)了應(yīng)用程序和用戶自定義書簽。然而,首要的模型是甘特圖,它為甘特圖組件提供數(shù)據(jù)。它是樹(shù)狀圖模型的延伸,因此它能在甘特圖的左手邊填上數(shù)據(jù)(左手邊是樹(shù)狀圖)。它同樣返回成為時(shí)間線的對(duì)象顯示在右手邊時(shí)間線的下方。時(shí)間線對(duì)象代表活動(dòng)、工作、事件、重要事件,甚至任何可以放在時(shí)間線上的事情,因?yàn)樗梢员贿B接到時(shí)間點(diǎn)或時(shí)間區(qū)。下面的圖片顯示了甘特圖模型的結(jié)構(gòu)。
懶加載:
根據(jù)應(yīng)用程序類型,需要顯示的數(shù)據(jù)量可能十分龐大。在這種情況下,只有使用“懶載入"方法,用戶界面才可以迅速和有較快響應(yīng)?!皯休d入"意味著數(shù)據(jù)只在用戶真正需要時(shí),從服務(wù)器(或數(shù)據(jù)庫(kù))傳到客戶端。FlexGantt 從層設(shè)計(jì)支持懶載入。例如:實(shí)現(xiàn)樹(shù)表展開(kāi)界面的對(duì)象將在樹(shù)展開(kāi)前收到一個(gè)事件,這樣,父節(jié)點(diǎn)的子節(jié)點(diǎn)可以被載入。頁(yè)面模型是另一個(gè)支持懶載入架構(gòu)的例子。
頁(yè)面:
如果一個(gè)調(diào)度程序需要處理大量的時(shí)間線對(duì)象,分割時(shí)間線到若干頁(yè)/時(shí)間跨度是有必要的。這一方式將數(shù)據(jù)分為小塊,甘特表可以更加容易地處理。頁(yè)模型處理單獨(dú)的頁(yè)面??梢栽诋?dāng)前頁(yè)、前一頁(yè)、后一頁(yè)、首頁(yè)和尾頁(yè)查詢。用戶界面提供一個(gè)控件用于選擇單獨(dú)頁(yè)面。
可自定義時(shí)間線:
每個(gè)程序有著對(duì)時(shí)間線的自定義的特殊要求。一些需要在日期旁顯示周數(shù),另一些則需要顯示天數(shù)(例如“第241天")。時(shí)間線可以靈活設(shè)計(jì)。它的模型可以被替換,它的顯示可以被替換,甚至整個(gè)時(shí)間線可以被替換為自定義子類。
層:
FlexGantt 使用*的層方法,該方法因在圖片和繪圖程序中的使用而聞名。每個(gè)甘特圖由兩個(gè)層集合組成,系統(tǒng)層集合提供核心功能(例如繪制垂直網(wǎng)格線),另一個(gè)層集合繪制時(shí)間線對(duì)象(活動(dòng)、事件、重要事件)。下面的圖片顯示了層棧。程序可以增加任意多的時(shí)間線對(duì)象層,可以容易地一次完成分組對(duì)象、顯示/隱藏的功能。層同樣支持透明化,因此層疊時(shí)間線對(duì)象能夠容易地被識(shí)別。
拖放網(wǎng)格:
時(shí)間線對(duì)象可以被水平拖動(dòng)、縮放和垂直拖動(dòng)。一個(gè)可見(jiàn)網(wǎng)格能被拖放操作激活,所以時(shí)間線對(duì)象可以更容易地被放置在特定時(shí)間。網(wǎng)格由策略控制,意味著任何種類的網(wǎng)格都可以被完成。可以設(shè)置默認(rèn)網(wǎng)格策略使得時(shí)間線對(duì)象可以吸附到從千年、百年、十年、年、月、星期、日以至于毫秒的任何時(shí)間。
策略控制行為:
調(diào)度程序在顯示信息、編輯數(shù)據(jù)、響應(yīng)用戶交互方面有著千差萬(wàn)別。FlexGantt 的策略框架能夠根據(jù)這些不同而被用于設(shè)定相適應(yīng)的甘特圖。策略是小的決定者,通常不包含很多的代碼。它們同樣是無(wú)狀態(tài)的。在許多情況下,它們僅僅返回標(biāo)記(booleans)和命令。標(biāo)記用作控制程序流,而命令被用作實(shí)現(xiàn)實(shí)際的數(shù)據(jù)修改(通過(guò)一個(gè)包含撤銷和恢復(fù)的命令棧)。
彈出/注釋:
時(shí)間線下方的欄是顯示一個(gè)事件的好區(qū)域,但是由于空間限制,它只能顯示有限的信息。當(dāng)鼠標(biāo)指針懸停在這一欄上,顯示彈出/注釋是一個(gè)很好的特性,這樣就能顯示足夠多的信息,提供給計(jì)劃者用作制訂調(diào)度決定。FlexGantt 的彈出可以與 Swing 組件一樣被自定義。不同的顯示可以被映射到不同種類的彈出對(duì)象。彈出對(duì)象由特定的彈出策略導(dǎo)出。下面的圖片顯示了默認(rèn)的彈出顯示,它顯示了序列化形式的彈出對(duì)象。
可變行高:
FlexGantt 圖的每行可以有自己的高度。這樣特性在樹(shù)表節(jié)點(diǎn)代表不同類型的對(duì)象或一個(gè)量與每個(gè)節(jié)點(diǎn)相關(guān)聯(lián)是十分有用。在此情況下,行高可以反映這樣量(例如一個(gè)資源的容量)。
多行排序:
甘特圖左手邊的樹(shù)表支持多行排序,意味著用戶可以同時(shí)選擇多個(gè)樹(shù)表列,表中數(shù)據(jù)將基于此選擇排列。 FlexGantt 使用快速排序算法進(jìn)行排序,支持升/降序排列。
日歷模型:
日歷模型提供甘特圖中有關(guān)周末、假日、或任何特殊時(shí)間范圍的數(shù)據(jù)。日歷模型的入口顯示在整個(gè)層容器的高度(右手邊)。的使用日歷模型的例子是對(duì)周末的定義。周末的背景將會(huì)以灰色顯示。
自動(dòng)卷動(dòng):
如果 FlexGantt 圖頻繁更新它的“現(xiàn)在時(shí)間/系統(tǒng)時(shí)間",有時(shí)使程序注意這樣時(shí)間是有必要的。當(dāng)自動(dòng)卷動(dòng)被激活,現(xiàn)在時(shí)間光標(biāo)(垂直虛線)將提留在層容即使時(shí)間流逝。當(dāng)程序具有更多監(jiān)視功能而不是交互調(diào)度功能時(shí),這是一個(gè)非常有用的特性。
書簽:
用戶日益習(xí)慣于書簽的概念。FlexGantt 同樣支持它們,而且用戶可以使用它們來(lái)快速調(diào)整時(shí)間線設(shè)置,這樣一個(gè)特定的時(shí)間點(diǎn)、間隔和范圍會(huì)被顯示在甘特圖上。定義過(guò)的書簽被列在菜單的導(dǎo)航控件中。 當(dāng)用戶點(diǎn)擊菜單按鈕時(shí),如果控制鍵被按下,將會(huì)顯示被標(biāo)簽的時(shí)間間隔的小預(yù)覽圖片
命令框架:
FlexGantt 提供一個(gè)小但強(qiáng)大的命令框架。它被用來(lái)支持編輯操作的撤銷和恢復(fù)。命令框架包含命令、命令棧、命和進(jìn)度監(jiān)視器。命令通過(guò)甘特表被執(zhí)行、撤銷和恢 復(fù),甘特表內(nèi)部使用一個(gè)可置換的命令棧。為了保證用戶界面的相應(yīng),命令在自己的線程中進(jìn)行。命令棧事件在命令執(zhí)行時(shí)被提交。進(jìn)度監(jiān)視器用來(lái)顯示命令的進(jìn) 度。子進(jìn)度監(jiān)視器用來(lái)監(jiān)視包含其他許多命令的混合命令。一旦一個(gè)命令結(jié)束執(zhí)行,它將被加入到命令棧的撤銷列表中。當(dāng)一個(gè)命令被執(zhí)行而無(wú)法撤銷時(shí),這一列表 將被清空。命令框架使用一個(gè)高級(jí)抽象層次,這一已存在的命令架構(gòu)(傳統(tǒng)代碼)可以被重用。
打?。?/strong>
甘特表顯示的計(jì)劃是一份文檔,而任何文檔都應(yīng)該能打印。內(nèi)建的打印支持使得用戶需要打印的時(shí)間范圍和間隔(見(jiàn)下圖)。結(jié)果表可以被打印成具有多頁(yè)的寬度和高度。
關(guān)系:
時(shí)間線對(duì)象之間具有某種關(guān)系是很普遍的。例如項(xiàng)目計(jì)劃軟件通常在它們之間定義約束。一些約束的例子:“在……之后開(kāi)始",“在……之前完成",“同時(shí)開(kāi) 始",“同時(shí)完成"。FlexGantt 通過(guò)繪制它們之間的線條來(lái)顯示關(guān)系。每個(gè)程序有自己的顯示方式(不同的約束有不同的顏色和/或不同的線風(fēng)格)。通過(guò)插入自定義關(guān)系顯示,可以實(shí)現(xiàn)任何種類 的關(guān)系顯示
可插入顯示和編輯器:
Swing 定義了許多顯示和編輯類用作它的用戶界面組件,例如樹(shù)、表格或列表。FlexGantt 與之相同,定義了樹(shù)表單元、列頭、彈出、日期線模型、時(shí)間線對(duì)象、事件線對(duì)象的顯示。時(shí)間線對(duì)象編輯器在甘特表左手邊的透明窗口里顯示。
多線:
多線特性使得甘特表在同一行上下顯示時(shí)間對(duì)象。這樣原可能互相重疊的時(shí)間線對(duì)象可以正常顯示。
Split Screen / Dual Gantt Chart
A feature required by almost any planning and scheduling application is the ability to keep the data of two different models or two different sections of the same model in synch while scrolling horizontally. The FlexGantt framework includes a Dual Gantt Chart that is capable of doing exactly that. The user can split / unsplit the Gantt chart at any time. A horizontal divider can be used to resize the upper and lower part. Timeline objects can be dragged from one to another.
Relationships
It is quite common that timeline objects have some kind of relationship with each other. Project planning software for example often defines constraints between them. Some examples for constraints are: 'start after', 'finish before', 'same start', 'same end'. FlexGantt can visualize them by drawing lines betwen them. Each application has its own way of visualizing them (different colors and / or line styles for different constraints). By plugging in a custom relationship renderer it is possible to implement any kind of relationship rendering.
Lazy loading
Depending on the application type the volume of data that needs visualization can be rather massiv. In these situations a user interface can only be fast and responsive if it uses a 'lazy loading' approach, which means that data will only be transferred from the server (or database) to the client when the user actually requests it. FlexGantt has been designed from the ground-up to support lazy loading. Example: objects that implement the tree table expansion listener interface will receive an event before the tree expands so that the child nodes of the expanding parent node can be loaded. The paging model is another example for infrastructure that supports lazy loading.
Model-View-Controller (MVC)
FlexGantt follows the same MVC approach that Swing is using. Several different models are used for various purposes. A calendar model keeps track of holidays and weekends. A paging model supports the user in loading different planning horizons, a bookmark model stores the application- and user-defined bookmarks. The primary model, however, the one that feeds the Gantt chart component with data is the Gantt chart model. It is an extension of a tree table model so that it can populate the left-hand side of the Gantt chart with data (the left-hand side is a tree table). It also returns so-called timeline objects that are displayed on the right-hand side underneath the timeline. Timeline objects represent activities, tasks, events, milestones, pretty much anything that can be placed on a timeline because it can be associated with a time point or a time span. The following graphic depicts the structure of a Gantt chat model.
Bookmarks
Users have become more and more used to the concept of bookmarks. FlexGantt supports them as well and users can use them to quickly adjust the timeline settings, so that a specific time point, granularity and horizon will be shown in the Gantt chart. The defined bookmarks are listed in a menu in the naviagtion controls. Small preview images of the bookmarked time span will be shown if the control key is down when the user clicked on the menu button.
Layers
FlexGantt uses a very unique layering approach that is known from graphics and mapping applications. Each Gantt chart consists of a set of system layers, which provide the core functionality (e.g. a drawing vertical grid lines) and a set of layers dedicated to rendering timeline objects (activities, events, milestones, ...). The picture below depicts the layer stack. Applications can add as many timeline object layers as they like, allowing them to easily group objects and show or hide them all at once. Layers also support transparency so that overlapping timeline objects can be easily identified.
Drag & Drop Grid
Timeline objects can be dragged and resized horizontally and dragged vertically. An invisible grid can be enabled during these drag & drop operations so that a timeline object can be more easily placed at a specific time. The grid gets controlled by a policy, which means that any kind of grid can be implemented. The default grid policy can be configured to make timeline objects snap to anything from millenium, centuries, decades, years, months, weeks, days, all the way to milliseconds.
Policy controlled behaviour
Scheduling applications vary too a large extent in the way they visualize information, edit data, and respond to user interaction. FlexGantt's policy framework can be used to tailor the Gantt charts to these variations. Policies are small little decision makers and usually do not contain a lot of code. They are also stateless. In many cases they return flags (booleans) and commands only. The flags are used to control the program flow, while the commands are used to perform the actual modification of data (via a command stack with undo and redo capabilities).
Pluggable Renderers & Editors
Swing defines several renderer and editor classes that are used for its UI components such as tree, table or list. FlexGantt does the same and defines renderers for tree table cells, column headers, popups, dateline models, timeline objects, eventline objects. Editors are available for tree table cells and timeline objects. A timeline object editor gets displayed in a transparent window within the right-hand side of the Gantt chart (in-place editing, see picture below)
Paging
If a scheduling application needs to deal with a large amount of timeline objects then it often makes sense to divide the timeline horizon into several pages / time spans. This way the data gets broken into smaller chunks that the Gantt chart can deal with more easily. The paging model manages the individual pages. It can be queried for the current page, the previous page, the next page, the first page, and the last page. The user interface provides a control that can be used to select individual pages.
Popups / Annotations
A bar underneath a timeline is a nice representation for an activity but it can only carry a limited number of information due to space restrictions. Popups / annotations that show up when the mouse cursor hovers over such a bar is a nice feature that can display a wealth of additional information that the planner might need to make a scheduling decision. FlexGantt's popups can be customized in the same way that any Swing component can be customized. Different renderers can be mapped to different types of popup objects. The popup objects are looked up from a specialized popup policy. The image below shows the default popup renderer that displays popup objects in its serialized form.
Printing
A plan shown in a Gantt chart is a document and every document needs to be printable. The built-in printing support for FlexGantt lets the user specify a time span and a granularity to be printed (see picture below). The resulting chart can be printed on several pages wide and high.
Command framework
FlexGantt provides a small but powerful command framework. It is used to support editing operations that can be undone and redone. The framework consists of commands, a command stack, a command stack listener and a progress monitor. Commands are executed, undone and redone via the Gantt chart, which internally uses a replaceable command stack. Commands are executed in their own thread in order to keep the user interface responsive. Command stack events are issued during the execution of the command. Progress monitors are used to display the progress made by a command. Sub-progress monitors are used for compound commands that consist of several other commands. Once a command has finished execution it will be added to the command stack‘s list of undoable commands. This list will be cleared when a command gets executed that can not be undone. The command framework uses a high level of abstraction so that an already existing command infrastructure (legacy code) can be reused.
Multiline
The multiline feature enables a Gantt chart to display timeline objects within the same row but above and below each other. This way timeline objects that would otherwise overlap each other can be displayed without problems.
Variable row heights
Each row in a FlexGantt chart can have its own height. This feature is very useful when the nodes in the tree table represent different types of objects or if a quantity is associted with each node. In this case the row height can reflect this quantity (e.g. the capacity of a resource).
Multi-column sorting
The tree table on the left-hand side of the Gantt chart supports multi-column sorting, which means that the user can select several tree table columns at the same time and the data in the table will be sorted based on this selection. FlexGantt uses a quicksort algorithm for fast sorting and supports ascending and descending sorting.
Calendar Model
The calendar model provides data for the Gantt chart related to weekends, holidays, or any other kind of special time span. Entries in the calendar model are rendered across the entire height of the layer container (right-hand side). The most prominent example for the use of the calendar model is the definition of those days that are considered weekend. The background of weekend days will grayed out.
Autoscrolling
If a FlexGantt chart updates its 'time now / system time' frequently then it sometimes makes sense to make the application focus on this time. When autoscrolling is enabled then the time now cursor (a vertical dashed line) will remain in the center of the layer container even when time progresses. This is a very useful feature when an application has more of a monitoring function then an interactive scheduling function.
Customizable Tmeline
Each application has its own requirements for the timeline. Some require the week of the year to be shown next to the date, others want to show the number of the day in the year (for example 'day 241'). The timeline has been designed with flexibility in mind. Its model can be replaced, its renderers can be replaced, even the entire timeline can be substituted with a custom subclass.
