JScrollBar
が表示されているかいないJPanel
を内かどうかを知るためのいくつかの方法がありますか?JScrollBarの目に見える
私は、いくつかの時間を意味し、私のパネルは、多くの長方形を持っている(ボタンと考える)と、それはそれを必要としないスクロールバーといくつかの時間を必要とします。私はそれがいつ表示されているかを知ることができるかどうかを知りたいです。
JScrollBar
が表示されているかいないJPanel
を内かどうかを知るためのいくつかの方法がありますか?JScrollBarの目に見える
私は、いくつかの時間を意味し、私のパネルは、多くの長方形を持っている(ボタンと考える)と、それはそれを必要としないスクロールバーといくつかの時間を必要とします。私はそれがいつ表示されているかを知ることができるかどうかを知りたいです。
あなたがJPanel
を拡張し、自分で(水平および/または垂直)JScrollbar
Sを追加する場合は、あなたは、彼らがしなければならないときに制御することができ、可視又は不可視の
(彼らはisvisible()
機能と、現在表示されているかどうかをチェックすることができます)
あなたはその内容に応じて、可視スクロールバーの必要性を決定し、このようなクラスの2つのサンプルを見つけることができる:
JGraphPanel
(そのコールバックactionPerformed(Event e)
は、ズーム倍率に基づいて視認性を調整します)Plane
(必要に応じてその機能adjustComponents()
がJScrollBar
にsetVisible()
を呼び出します)あなたは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をラップすると、スクロールバーが実際に画面に表示されたときにのみ通知されます。 – bigleftie
をさらに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