5

JPanel を含む JScrollPane があります。この JPanel にたくさんのボタンを詰め込みます。

現在表示されているボタンを取得する可能性はありますか?

経由で JPanel の子にアクセスできることはわかっていますjpanel.getComponents()が、それらはすべてこのペインのコンポーネントです。現在画面に表示されているものだけが必要です。

4

4 に答える 4

8

@mKorbelの回答にすでにコメントしたように:

  • 子の境界が必要なのは正しいです
  • それらの境界を「何か」と交差させる必要があるのは正しいです
  • 含まれているビューポート(スクロールペインも)が必要なのは間違っています

JComponents には、現在表示されている方法/場所とは関係なく、現在表示されている部分を取得するための API があるため、「何か」は JComponent の visibleRect です。

Rectangle visibleRect = myPanel.getVisibleRect();
for (Component child : myPanel.getComponents()) {
   Rectangle childBounds = child.getBounds();
   if (childBounds.intersects(visibleRect)) {
       // do stuff
   }
}
于 2011-12-13T11:37:06.673 に答える
7

このコンテナはすでに画面に表示されていると想定しています。

1) JScrollPaneからJViewPortを抽出するには、

2)にChangeListenerを追加JViewPort

3) 可視の各JComponent(s)戻り値Rectangle

4) Rectangle#intersectsは、可視か不可視かのBoolean値を返します。JComponent(s)JViewPort

于 2011-12-13T08:52:02.260 に答える
1

コンポーネントが表示されているかどうかを尋ねるのはどうですか。

for ( Component component : jpanel.getComponents() ) {
    if ( component instanceof JButton && component.isShowing() ) {
        // We've found a button that is showing...
    }
}
于 2011-12-13T08:05:33.490 に答える
0
scrollPane.getViewport().getView()
scrollPane.getViewport().getViewRect()
于 2011-12-13T08:41:15.750 に答える