我有一個滾動窗格,裏面有一個Jpanel,我用許多按鈕填充這個jpanel。是否有可能獲得當前顯示的組件?在滾動窗格中獲取顯示的組件
因爲我想知道哪些是當前顯示的按鈕。 (我知道我可以通過jpanel.getComponents()
訪問一個jpanel的孩子,但是這個窗格中的所有組件都只需要當前屏幕上的組件)。
BR
萊昂
我有一個滾動窗格,裏面有一個Jpanel,我用許多按鈕填充這個jpanel。是否有可能獲得當前顯示的組件?在滾動窗格中獲取顯示的組件
因爲我想知道哪些是當前顯示的按鈕。 (我知道我可以通過jpanel.getComponents()
訪問一個jpanel的孩子,但是這個窗格中的所有組件都只需要當前屏幕上的組件)。
BR
萊昂
我的廟這個容器已經是可見的屏幕上,那麼我建議
1)來提取JScrollPaneJViewPort,
2)addChangeListener到JViewPort
3)每個可見JComponent(s)
返回Rectangle
4)和Rectangle#intersects返回Boolean
值如果是JComponent(s)
可見或不可以JViewPort
如何要求的組件,如果他們看到:
for (Component component : jpanel.getComponents()) {
if (component instanceof JButton && component.isShowing()) {
// We've found a button that is showing...
}
}
scrollPane.getViewport().getView()
scrollPane.getViewport().getViewRect()
太複雜了..和_你知道它:-) – kleopatra
由於
JComponents具有api以獲取其當前可見部分,而不依賴於當前顯示的方式/位置N,所以「東西」是它的visibleRect:
Rectangle visibleRect = myPanel.getVisibleRect();
for (Component child : myPanel.getComponents()) {
Rectangle childBounds = child.getBounds();
if (childBounds.intersects(visibleRect)) {
// do stuff
}
}
恕我直言,這是最好的答案。我驚訝地發現它在底部! – Jack
c)「你需要包含的視口(也不是滾動面板)',[你不能使用重塑]是錯誤的(http://docs.oracle.com/javase/7/docs/api/javax/swing/的JViewport。HTML#重塑%28int,%20int,%20int,%20int 29%),然後'JViewport'能爲來到返回不同的'Rectangle' /用'JScrollPane' – mKorbel
@mKorbel星期天早上頭刮從/委託 - 正如經常我不太明白你在說什麼:-)在我的代碼中,你看到了一個視口?它不是有整點:沒關係誰是父,內部將採取的一些本質細節。 – kleopatra
非常感謝,這正是我期待的! – Leon
享受彎路,不是嗎:-)沒有什麼是必要的,除了子彈3和第一部分子彈4 ... – kleopatra