3

JScrollPaneのスクロールバーからスクロールバーの矢印ボタンを削除したいと思います。どうすればいいですか?

4

4 に答える 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 に答える