摘要: Network 上面的Node,默認情況是Label的折行只能通過HTML的
標簽,這樣做的弊端就是不能動態 根據文字的長度智能折行。 如果需要達到這個要求,需要定制Node的LabelAttachment。 最初的想法是 創建一個WrapLabelAttachment,繼承自LabelAttachment,然后通過在一個JTextArea,設置文字,setLineWrap(true),指定JTextArea的寬度,然后把JTextArea 的內容繪制這個Attachment;在實現的過程中,發現JTextArea 有一個bug,就是折行的計算不準確,總是在右邊留下很大的空白; 如下圖: 測試代碼: 最后通過自己定制一個MyTextArea來實現,在MyTextArea中,用LineBreakMeasurer來計算動態折行: 代碼: 然后重寫WrapLabelAttachment的 paintName 方法 和getBounds 方法: 代碼: 代碼: getBounds方法需要動態計算rect 的寬高。 最終效果圖: 全部代碼見附件: WrapLabelDemo
閱讀全文