我正在JComponents在屏幕上「加蓋」的GUI上工作。換句話說,不顯示實際的組件,而是顯示組件的圖像。這是一張圖表,其中圖形的節點是自定義的Swing組件 - 或者是Swing組件的標記圖像。在JComponent被繪製之前可以使用findComponentAt()工作嗎?
現在我想顯示我的節點中特定組件的工具提示。
爲此,我創建了一個與所顯示的JComponent相同的JComponent,並使用鼠標的x和y值,我詢問findComponentAt()是否爲正確的組件。這不起作用。如果我爲節點重複使用JComponents,如果我嘗試獲取與最後一個繪製的大小不同的節點的工具提示,將會感到困惑。如果我在計算工具提示時爲每個節點創建一個新的JComponent,並創建一個新的JComponent,則新建的初始大小爲0,0。我可以使用getPreferredSize()計算來設置大小,但這仍然不起作用。根JComponent(一個JPanel)具有合適的大小,但它們的孩子都沒有任何大小。
工具提示運算用代碼的樣品:
// Get a component that matches the stamped component
JComponent nodeComponent = getNodeComponent();
// These next two lines get the size right
nodeComponent.setSize(nodeComponent.getPreferredSize());
nodeComponent.revalidate();
Component componentTop = nodeComponent.findComponentAt(relativeX, relativeY);
componentTop回來作爲根的JComponent無論什麼x和y值被通過。
那麼是否有可能讓Swing正確計算JComponents的大小和位置而不實際繪製它們?
問題不在於找到正確的節點。我有這個。問題是獲取節點中的子組件。根據鼠標是否位於標籤或圖像上,我想在同一個節點中使用不同的工具提示。 – 2009-05-27 20:16:11