JScrollPaneのスクロールバーからスクロールバーの矢印ボタンを削除したいと思います。どうすればいいですか?
5701 次
4 に答える
6
class NoArrowScrollBarUI extends BasicScrollBarUI {
protected JButton createZeroButton() {
JButton button = new JButton("zero button");
Dimension zeroDim = new Dimension(0,0);
button.setPreferredSize(zeroDim);
button.setMinimumSize(zeroDim);
button.setMaximumSize(zeroDim);
return button;
}
@Override
protected JButton createDecreaseButton(int orientation) {
return createZeroButton();
}
@Override
protected JButton createIncreaseButton(int orientation) {
return createZeroButton();
}
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
//own painting if needed
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
//own painting if needed
}
}
ボタンを削除すると、そのためのスペースが確保されます。最も簡単な方法として、makeボタンをゼロにすることがわかりました。
于 2010-11-12T07:08:40.360 に答える
2
JScrollBar の基本バージョンを使用している場合は、おそらく BasicScrollBarUI を使用してレンダリングされています。BasicScrollBarUI を拡張してカスタム UI クラス (MyBasicScrollBarUI など) を作成することをお勧めします。ボタンはスーパークラスの保護された変数です。そのため、サブクラスで installComponents() メソッドをオーバーライドし、ボタンを追加しないようにする必要があります。以下のコード スニペットを参照し、そこで提案されているように行を非表示にします。
protected void installComponents(){
switch (scrollbar.getOrientation()) {
case JScrollBar.VERTICAL:
incrButton = createIncreaseButton(SOUTH);
decrButton = createDecreaseButton(NORTH);
break;
case JScrollBar.HORIZONTAL:
if (scrollbar.getComponentOrientation().isLeftToRight()) {
incrButton = createIncreaseButton(EAST);
decrButton = createDecreaseButton(WEST);
} else {
incrButton = createIncreaseButton(WEST);
decrButton = createDecreaseButton(EAST);
}
break;
}
scrollbar.add(incrButton); // Comment out this line to hide arrow
scrollbar.add(decrButton); // Comment out this line to hide arrow
// Force the children's enabled state to be updated.
scrollbar.setEnabled(scrollbar.isEnabled());
}
次に、JScrollBar を初期化した後のコードで、setUI() を呼び出して、MyBasicScrollBarUI クラスのインスタンスを渡すことができます。
注:私はこれを自分で試したことはありませんが、コードからはうまくいくようです。
于 2009-11-24T00:23:30.657 に答える
0
それは最もエレガントな方法ではありません...しかし、私にとってはうまくいきます
JScrollBar jsb = getHorizontalScrollBar();
for(Component c : jsb.getComponents()) {
jsb.remove(c);
}
于 2017-10-20T06:16:27.200 に答える