翻譯|使用教程|編輯:楊鵬連|2020-08-18 14:07:46.003|閱讀 395 次
概述:在此博客文章中,我們將說明如何基于特定條件在日歷的“資源”視圖中為單元格和資源著色。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MindFusion.Diagramming for WinForms是一個能幫助你創建工作流和進程圖表的.NET控件;數據庫實體關系圖表;組織圖表;對象層次和關系圖表;圖表和樹。它是基于對象-圖表框,表格和箭頭類型,將其歸類分派給其他并結合成復雜的結構。該控件提供超過預先定義的50多種圖表框,如自定義設計樣式和對圖表框著色等。MindFusion.Diagramming for WinForms現已加入在線訂購,Standard Single Developer版本原價2848現在搶購立享優惠只需2345,立即查看詳情>>
點擊下載MindFusion.Diagramming for WinForms最新試用版
相關鏈接:
MindFusion.Diagramming for WinForms使用教程:Java Scheduler中資源的自定義繪制(一)
二.定制圖紙
我們希望通過資源表的外觀實現的目標是對單元格背景進行選擇性著色,這可以通過自定義繪圖來完成。自定義繪圖為我們提供了根據視圖為日歷的大多數元素著色的方法。“自定義繪制元素”示例為我們提供了與CustomDrawElements枚舉相對應的元素的可視表示形式,該枚舉確定了在時間表中要自定義繪制的內容:
Java Swing Scheduler:根據“日歷”視圖演示自定義繪圖元素的示例
我們要為資源標頭和與此資源相對應的單元格上色。因此,我們使用setCustomDraw方法來實現這一點:
calendar.setCustomDraw(EnumSet.of(CustomDrawElements.ResourceViewRowHeader, CustomDrawElements.ResourceViewCellComplete));CustomDrawElements枚舉的成員允許按位組合。繪制在draw事件的事件處理程序中完成:
calendar.addCalendarListener(new CalendarAdapter() { public void draw(CalendarDrawEvent e) { onCalendarDraw(e); } });我們使用CalendarAdapter訂閱draw事件,該事件由onCalendarDraw方法處理。該CalendarDrawEvent類暴露許多屬性,讓我們關于正在繪制的元素信息。我們使用getElement方法檢查正在繪制的元素是單元格還是標題。如果是單元格,則獲取與其對應的資源;如果它是正確的單元格,則繪制一個矩形,該矩形表示當前繪制的元素的整個區域。我們用getBounds方法得到它:
if (e.getElement() == CustomDrawElements.ResourceViewCellComplete) { Rectangle bounds = new Rectangle(e.getBounds()); bounds.x += 1; if (e.getResource().getId().equals("IdMike") || e.getResource().getId().equals("IdChuck") || e.getResource().getId().equals("IdTom") || e.getResource().getId().equals("IdAlfredo")) { g.fillRectangle(_brush3, bounds); g.drawString("Office", _font, _textBrush, bounds, f); }我們將在與同一資源相對應的資源標頭上繪制一個輪廓,并用_brush3為其行著色:
else if (e.getElement() == CustomDrawElements.ResourceViewRowHeader) { if (e.getResource().getId().equals("IdMike") || e.getResource().getId().equals("IdChuck") || e.getResource().getId().equals("IdTom") || e.getResource().getId().equals("IdAlfredo")) { Brush _brush3 = new SolidBrush(new Color(254, 249, 207, 100)); g.fillRectangle(_brush3, e.getBounds()); g.drawRectangle(new Pen(new Color(163, 198, 134, 255), 2), e.getBounds().getMinX() + 1, e.getBounds().getMinY() + 1, e.getBounds().getMaxX() - 2, e.getBounds().getMaxY() - 2); } }在這里,我們檢查,如果自定義繪制元素是CustomDrawElements的CalendarDrawEvent類,這為事件提供數據給了我們足夠的信息來識別正在繪制的確切元素。
三,所選資源的工具提示
默認情況下,日歷提供項目的工具提示。該ItemTooltipEvent提供更多這方面的信息。但是,當用戶將鼠標懸停在與我們在第二節中繪制的元素相對應的單元格上方時,我們希望顯示工具提示。我們可以通過使用MouseMotionListener并訂閱mouseMove事件來實現。請注意,這些是標準的Java Swing事件:calendar.addMouseMotionListener(new MouseAdapter() { public void mouseMoved(MouseEvent e) { onCalendarMouseMoved(e); } });在事件處理程序方法中,我們使用Calendar的getResourceAt方法來學習鼠標懸停在其上的資源。然后,我們使用分配給資源的id-s,并檢查鼠標是否位于我們要呈現工具提示的資源上:
private void onCalendarMouseMoved(MouseEvent e) { Resource res = calendar.getResourceAt(e.getX(), e.getY()); if (res.getId().equals("IdMike") || res.getId().equals("IdChuck") || res.getId().equals("IdTom") || res.getId().equals("IdAlfredo")) { calendar.setToolTipText(res.getId()); } else { calendar.setToolTipText(""); } }
當我們檢測到鼠標懸停在不需要呈現工具提示的資源上時,我們將收費提示文本設置為空字符串。
至此,我們完成了自定義資源樣本。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: