我有一個JScrollPane,其中包含一個JPanel,它具有很大的高度,這個大的JPanel包含更多的Jpanels,就像在圖像中一樣。其中一些面板包含我用來顯示標題的JLabel。在頂部,有JLabel的標題標籤中的標題編號與數字匹配。我需要做的是,當我從頂部標籤列表中單擊標籤時,JScrollBar應該滾動到放置標籤的位置。如何滾動到JScrollPane中的特定位置
我不知道這是否可行,但如果有人知道如何滾動到JScrollPane中的特定位置,請協助我。
我有一個JScrollPane,其中包含一個JPanel,它具有很大的高度,這個大的JPanel包含更多的Jpanels,就像在圖像中一樣。其中一些面板包含我用來顯示標題的JLabel。在頂部,有JLabel的標題標籤中的標題編號與數字匹配。我需要做的是,當我從頂部標籤列表中單擊標籤時,JScrollBar應該滾動到放置標籤的位置。如何滾動到JScrollPane中的特定位置
我不知道這是否可行,但如果有人知道如何滾動到JScrollPane中的特定位置,請協助我。
假設你想要包含的標題是可見的標籤,整個面板:
Container parent = titleLabel.getParent();
parent.scrollRectToVisible(parent.getBounds());
有沒有需要訪問含有視/滾動窗格除了(總有一個不同之處,不它:-)
編輯
一個代碼片段@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);
啊,我知道,絕對白癡在外面。我假設矩形是相對於滾動窗格。 <弓箭手> - 我將其添加到我的小黑皮書中。謝謝(現在我想刪除我的答案:P) – MadProgrammer
ps我知道你不需要它,但+1 - 恥辱我不能投票更多;) – MadProgrammer
這是可行的。
您需要在標題中指向JLabel
並在您的視圖中鏈接到的位置(JPanel
)。一旦你有這個鏈接,你可能需要確定'JPanel'中JLabel
的位置。
您可以使用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);
或直接更改矩形 到JLabels界限 – mKorbel
@mKorbel您是對的......如果在我的腦海中可能有移動視口的可能性,以便標籤出現在滾動窗格的底部......但顯然這只是一個瘋狂的話題:P – MadProgrammer
-1表示過於複雜(tsss ...另一個極其粘性的錯誤;):label.scrollRectToVisible(label.getBounds())就是需要的。 – kleopatra
scrollRectToVisible dont't爲我工作。 但是,我解決了這個辦法:
AbstractNode a = pkmap.get(0);
scroll.getVerticalScrollBar().setValue(a.getY());
scroll.getHorizontalScrollBar().setValue(a.getX());
我已經找到了解決方案,它運作良好,我所做的是,我得到的標題標籤,我需要的Y位置,然後調用follwing JScrollPane的,JScrollPane中的方法。 getViewport()。setViewPosition(new Point(0,[標頭標籤的Y位置])); – Harsha