从JScrollPane中的JScrollBar删除箭头按钮

时间:2020-05-13 15:59:35

标签: java swing jscrollpane jscrollbar

JButton:

 public class noButton extends JButton
    {
        //tried getPreferredSize() and getSize() too
        @Override
        public Dimension getMaximumSize() 
        {          
            return new Dimension();
        }
    }

自定义用户界面:

public class barUI extends BasicScrollBarUI {
    barUI()
    {
    }
    protected JButton createIncreaseButton(int i) {
        return new noButton();
    }
    protected JButton createDecreaseButton(int i){
        return new noButton();
    }
    @Override
    protected void installComponents() {
        switch(this.scrollbar.getOrientation()) {
            case 0:
                if (this.scrollbar.getComponentOrientation().isLeftToRight()) {
                    this.incrButton = this.createIncreaseButton(3);
                    this.decrButton = this.createDecreaseButton(7);
                } else {
                    this.incrButton = this.createIncreaseButton(7);
                    this.decrButton = this.createDecreaseButton(3);
                }
                break;
            case 1:
                this.incrButton = this.createIncreaseButton(5);
                this.decrButton = this.createDecreaseButton(1);
        }
        this.incrButton=new noButton();
        this.decrButton=new noButton();
        this.decrButton.setSize(0,0);
        this.scrollbar.add(incrButton);
        this.scrollbar.add(decrButton);
        System.out.println(incrButton.getParent());
        System.out.println(incrButton.getSize());
        this.scrollbar.setEnabled(this.scrollbar.isEnabled());
    }
}

ScrollPane:

scroll=new JScrollPane(){
            @Override
            public void updateUI(){
                super.updateUI();
                getVerticalScrollBar().setUI(new barUI());
                getHorizontalScrollBar().setUI(new barUI());
            }
        };

我一直试图先删除一个按钮。上面的代码是在各种线程中提出的,但它绝对不起作用。我只是得到了由vertical.setPreferredSize(new Dimension(10,10));

调整大小的默认外观按钮

还有另一种建议,那就是覆盖添加按钮并删除相关行的方法。..

更新:在问题中添加了“箭头”以进行澄清 更新:更改代码

1 个答案:

答案 0 :(得分:0)

还有另一种建议可以覆盖添加按钮并删除相关行的方法。

似乎可以正常工作:

import java.awt.*;
import java.util.Collections;
import javax.swing.*;
import javax.swing.plaf.metal.MetalScrollBarUI;

public class RemoveArrowButtonsTest {
  private Component makeUI() {
    UIManager.put("ScrollBar.incrementButtonGap", 0);
    UIManager.put("ScrollBar.decrementButtonGap", 0);
    String txt = String.join("\n", Collections.nCopies(100, "1234567890"));
    JPanel p = new JPanel(new GridLayout(1, 0));
    p.add(new JScrollPane(new JTextArea(txt)));
    p.add(new JScrollPane(new JTextArea(txt)) {
      @Override public void updateUI() {
        super.updateUI();
        getVerticalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
        getHorizontalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
      }
    });
    return p;
  }

  public static void main(String[] args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new RemoveArrowButtonsTest().makeUI());
      f.setSize(320, 240);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}

class ZeroSizeButton extends JButton {
  @Override public Dimension getPreferredSize() {
    return new Dimension();
  }
}

class WithoutArrowButtonScrollBarUI extends MetalScrollBarUI {
  @Override protected JButton createDecreaseButton(int orientation) {
    return new ZeroSizeButton();
  }

  @Override protected JButton createIncreaseButton(int orientation) {
    return new ZeroSizeButton();
  }
}
相关问题