有什么方法可以知道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