8

高さの大きいJPanelを含むJScrollPaneがあります。この大きなJPanelには、画像のように、より多くのJpanelが含まれています。それらのパネルのいくつかには、タイトルを表示するために使用したJLabelが含まれています。上部には、タイトルラベルのタイトル番号と一致する番号を持つJLabelがあります。一番上のラベルリストからラベルをクリックすると、JScrollBarはそのラベルが配置されている位置までスクロールする必要があります。

これが可能かどうかはわかりませんが、JScrollPaneの特定の位置にスクロールする方法を知っている人がいれば、私を助けてください。

ここに画像の説明を入力してください

4

3 に答える 3

9

タイトルとしてラベルを含むパネル全体を表示したいとします。

Container parent = titleLabel.getParent();
parent.scrollRectToVisible(parent.getBounds());

含まれているビューポート/スクロールペインにアクセスする必要はありません(ただし、常に例外がありますね:-)

  • scrollRectToVisibleが呼び出されるコンポーネントには、カスタム実装があります(fiテキストコンポーネントとして)
  • その方法で到達したデフォルトの場所があなたの好みに合わない場合

編集

@MadProgrammerのコードスニペット:-)-しかし、SwingXのすべてのトレースを削除するには遅すぎるので、ここに進みます。

final JLabel last = new JLabel("I'm the last");

int maxRow = 20;
int maxColumn = 10;

JComponent content = new JPanel(new GridLayout(maxRow, maxColumn));
for (int row = 0; row < maxRow; row++) {
    for (int column = 0; column < maxColumn; column++) {
        JComponent parent = new JPanel();
        JLabel label = new JLabel("i'm in " + row + "/" + column);
        if (row == (maxRow - 1) && column == (maxColumn - 1)) {
            label = last;
            last.setBorder(BorderFactory.createLineBorder(Color.RED));
        }
        parent.add(label);
        content.add(parent);
    }
}
JXFrame frame = wrapWithScrollingInFrame(content, "scroll");
Action action = new AbstractAction("scrollLastVisible") {

    @Override
    public void actionPerformed(ActionEvent e) {
        last.scrollRectToVisible(last.getBounds());
    }
};
addAction(frame, action);
show(frame, frame.getPreferredSize().width / 2, frame.getPreferredSize().height / 2);
于 2012-08-24T08:14:54.793 に答える
7

それは実行可能です。

JLabelヘッダー内のへの参照と、ビュー内のリンク先( JPanel)が必要になります。このリンクを取得したらJLabel、「JPanel」内の場所を特定する必要があります。

このメソッドを使用して、JViewport.scrollRectToVisible(Rectangle)その場所までスクロールできます。

JLabel labelInPane = //... reference lookup
Rectangle bounds = labelInPane.getBounds();
// You may need to convert the point to meet the requirements of the parent container...
// bounds.setLocation(SwingUtilities.convertPoint(labelInPane, bounds.getPoint(), topLevelParentPaneInScrollPane));

scrollPane.getViewport().scrollRectToVisible(bounds);
于 2012-08-24T03:05:53.457 に答える
3

scrollRectToVisibleは私には機能しません。しかし、私はこのように解決しました:

AbstractNode a = pkmap.get(0);
scroll.getVerticalScrollBar().setValue(a.getY());
scroll.getHorizontalScrollBar().setValue(a.getX());
于 2016-08-09T17:42:19.310 に答える