2012-01-20 31 views
0

作爲我在Java swing中實現的GUI設計的一部分,我需要用戶能夠選擇樹的部分或子部分,如表​​示爲字符串的結構。在Swing GUI中選擇嵌套的子表達式

例如,如果我是顯示下面的表達式,((a|b)|(c|d))

用戶將需要能夠選擇以下任何 (a|b),或(c|d)整個事情((a|b)|(c|d))的。

理想情況下,我希望他們能夠通過鍵盤箭頭進行導航,通過嵌套的子表達式上下移動,並在他們到達他們想要的子表達式時按下回車鍵。然而,如果只有鼠標點擊才能做到這一點,那也是可以接受的。

我遇到的主要問題是嵌套組件。我可以很容易地使整個表達式可選,但我不知道如何使用SWING組件來選擇子表達式。根據我的研究,Swing不允許以我需要的方式嵌套文本區域的標籤,所以我正在尋找任何替代方法。

任何幫助或建議將不勝感激。

+3

我建議避免使用原始字符串,而是使用基於樹的模型來處理數據。然後你可以使用樹視圖來顯示它。 http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html –

+0

那麼數據存儲在一個自定義的對象很像一棵樹,它只需要顯示給用戶一個字符串(我'已經編輯了這個問題更清楚)。只要我可以將外觀定製爲水平而非垂直,樹視圖看起來很有前景。 –

+3

您可以製作只讀的JTextField,捕獲按鍵和鼠標點擊,處理箭頭鍵,並使用HTML文本「((a | b)...」突出顯示「(...)」。 –

回答

2

你可以在部分約JTextFieldDemo使用Highlighter並在上面的評論由喬普建議只讀JTextField一個DocumentListener,以下http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html。這樣,您可以突出顯示(部分)字符串並監聽選擇了哪個(子)字符串,並將其與原始字符串進行比較以檢查匹配。

+0

這似乎是一個很好的解決方案,我會在週末嘗試一下,等待其他回答rs之前我標記你的接受,但。謝謝 –