類似しているが同一ではない質問:
Java - Is it possible to put a JLayeredPane inside JScrollPane? JScrollPaneとJLayeredPane を使用して JTable セルとSwing GUI デザインにアニメーションを表示する方法。
これを適切に行うには、サイジング、ヘッダー、UI の変更という 3 つの個別の問題を考慮する必要があります。
サイジング
適切にスクロールしてペイントするにJScrollPane
は、その中のコンポーネント (この場合はJLayeredPane
. Component
ただし、他の がテーブルの上に浮いているため、テーブルによってサイズを設定する必要があります。この場合、最も簡単な方法は、JTable
次のように JLayeredPane デリゲート サイズ関連のプロパティを作成することです。
final JTable table = new JTable();
JLayeredPane layers = new JLayeredPane() {
@Override
public Dimension getPreferredSize() {
return table.getPreferredSize();
}
@Override
public void setSize(int width, int height) {
super.setSize(width, height);
table.setSize(width, height);
}
@Override
public void setSize(Dimension d) {
super.setSize(d);
table.setSize(d);
}
};
// NB you must use new Integer() - the int version is a different method
layers.add(label, new Integer(JLayeredPane.PALETTE_LAYER), 0);
JScrollPane scrolling = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrolling.setViewportView(layers);
JTable
を のサイズを決定するものにしたくない場合はJLayeredPane
、他の方法で決定する必要があり、テーブルのサイズも決定する必要があります。どちらも明示的にそれらを必要setPreferredSize()
とし、それらを呼び出します。setSize()
ヘッダー
JTable はもはやビューポートではないため、ヘッダーを自分でリンクする必要があります。次のコードが機能します。
scrolling.setColumnHeaderView(table.getTableHeader());
scrolling.setRowHeaderView(rowHeader);
UI
configureEnclosingScrollPane()
また、 JTable はとで厄介なコードを実行することに注意してくださいconfigureEnclosingScrollPaneUI()
。UI スタイルの変更を適切に機能させたい場合は、これらのメソッドをオーバーライドする必要がありますが、これを行う方法はまだわかっていません。