有什麼方法可以知道JScrollBar
是否可見或不在JPanel
內?JScrollBar可見
我的意思是,有時候,我的面板有許多矩形(把它想成按鈕),需要一個滾動條,有時候它不需要它。我想知道我是否可以知道它何時顯示。
有什麼方法可以知道JScrollBar
是否可見或不在JPanel
內?JScrollBar可見
我的意思是,有時候,我的面板有許多矩形(把它想成按鈕),需要一個滾動條,有時候它不需要它。我想知道我是否可以知道它何時顯示。
如果延長JPanel
,並添加自己的JScrollbar
S(水平和/或垂直),然後就可以控制時,他們必須是有形或無形的
(你可以檢查它們是否當前與isvisible()
功能可見)
你可以找到這樣的類,決定根據其內容需要滾動條可見兩個例子:
JGraphPanel
(其回調actionPerformed(Event e)
基於縮放因子將調整能見度)Plane
(其功能adjustComponents()
如果需要的話會叫setVisible()
在JScrollBar
)假設你有一個JScrollPane
一個參考,你應該能夠只是調用
yourJScrollPane.getHorizontalScrollBar().isVisible()
或
yourJScrollPane.getVerticalScrollBar().isVisible()
如果您還需要得到有關可見性變化的通知可以使用代碼如下:
final JScrollPane scroll = new JScrollPane(createMyPanel());
scroll.getVerticalScrollBar().addHierarchyListener(new HierarchyListener() {
@Override
public void hierarchyChanged(HierarchyEvent e) {
if (e.getID() == HierarchyEvent.HIERARCHY_CHANGED &&
(e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
System.out.println(scroll.getVerticalScrollBar().isVisible());
}
}
});
通過用「if(isShowing())」包裝println,只有當ScrollBar在屏幕上可見時纔會收到通知。 – bigleftie 2012-12-07 09:33:19
而且通過VonC和約書亞的答案,這是值得注意的是isVisible()
是超類Component
的方法。另外,javadoc指出:
確定此組件在其父項可見時是否應可見。 組件最初是可見的,但頂級組件(如框架對象)除外。
這意味着的是,直到JScrollPane
添加到尺寸框架,呼籲JScrollBar
將總是返回true
isVisible()
。
考慮以下SSCCE:
public static void main(String[] args) {
// creates a small table in a larger scroll pane
int size = 5;
JTable table = new JTable(makeData(size), makeHeadings(size));
JScrollPane pane = new JScrollPane(table);
pane.setPreferredSize(new Dimension(200, 200));
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints true
JFrame frame = new JFrame("JScrollPane Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(pane);
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints true
frame.pack();
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints false
frame.setVisible(true);
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints false
}
private static Object[] makeHeadings(int size) {
Object[] headings = new Object[size];
for (int i=0; i<size; i++){
headings[i] = i;
}
return headings;
}
private static Object[][] makeData(int size) {
Object[][] data = new Object[size][size];
for (int i=0; i<size; i++){
for (int j=0; j<size; j++){
data[i][j] = i*j;
}
}
return data;
}
同樣,它的價值增加,如果您要添加的JScrollPane
到一個內部框架,然後scrollBar.isVisible()
只會一次內部框架已添加到另一個組件工作。
這對我有效!謝謝!! – KulaDamian 2017-12-13 06:05:08