可隐藏垂直JSlider(仅显示拇指/旋钮)

时间:2016-06-22 11:49:36

标签: java swing hide jcombobox jslider

我想使用Vertical JSlider,但只显示滑块拇指(不是 轨道,刻度,标签)。按下拇指后,将显示隐藏的属性。 也许是混淆解释我的想法,就像按下JComboBox的arrowButton并展开JComboBox(下拉列表)。

一些例子。

我不知道从哪里开始,有些线索?

如何在选择旋钮时隐藏JSlider的所有背景并显示?

我正在阅读JComboBox,ComboBoxEditor,BasicComboBoxEditor ......

http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizingaJSliderLookandFeel.htm

How do I make a JSlider background transparent? or How do I properly overlay JComponents in JLayeredPane?

Painting the slider icon of JSlider

how to put an image over jslider's knob image when mouse is present over the knob's image

enter image description here

更改BasicSliderUI

这是我的代码:

JPanel jpEmpty = new JPanel();
jpEmpty.setLayout(new BoxLayout(jpEmpty, BoxLayout.LINE_AXIS));
JSlider sliderEmpty = new JSlider(SwingConstants.VERTICAL);
sliderEmpty.addMouseListener(new MouseInputListener() {
  @Override
  public void mouseDragged(MouseEvent e) {
    System.out.println("mouseDragged(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mousePressed(MouseEvent e) {
    sliderEmpty.setPaintTrack(true);
    System.out.println("mousePressed(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mouseReleased(MouseEvent e) {
    sliderEmpty.setPaintTrack(false);
    System.out.println("mouseReleased(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mouseClicked(MouseEvent e) {
  }
  @Override
  public void mouseEntered(MouseEvent e) {
  }
  @Override
  public void mouseExited(MouseEvent e) {
  }
  @Override
  public void mouseMoved(MouseEvent e) {
  }
});
jpEmpty.add(sliderEmpty);
jPanel1.setLayout(new BoxLayout(jPanel1, BoxLayout.PAGE_AXIS));
jPanel1.add(Box.createRigidArea(new Dimension(0,5)));
jPanel1.add(jpEmpty);
jPanel1.add(Box.createRigidArea(new Dimension(0,5)));
setLayout(new BorderLayout());
add(jPanel1);
pack();
validate();

enter image description here ReleasedThumb

enter image description here PressedThumb

替代选项以恐怖的方式更改JSlider尺寸!

JSlider slideResize = new JSlider(SwingConstants.VERTICAL);
int thumbHeight = UIManager.getLookAndFeelDefaults().getInt("Slider.thumbHeight");
int thumbWidth = UIManager.getLookAndFeelDefaults().getInt("Slider.thumbWidth");
Dimension newResizeDim = new Dimension(thumbWidth, thumbHeight);//Size For Released Knob/Thumb
Dimension oldResizeDim = ((BasicSliderUI)slideResize.getUI()).getPreferredVerticalSize();//Size For Pressed Knob/Thumb
slideResize.setPreferredSize(new Dimension(thumbWidth, thumbHeight));//Change to Small size by Default
slideResize.addMouseListener(new MouseInputListener() {
  @Override
  public void mouseDragged(MouseEvent e) {
    System.out.println("mouseDragged(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mousePressed(MouseEvent e) {
    slideResize.setPreferredSize(oldResizeDim);
    System.out.println("mousePressed(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mouseReleased(MouseEvent e) {
    slideResize.setPreferredSize(newResizeDim);
    System.out.println("mouseReleased(x:" + e.getX() + " , y:"+ e.getY() + ")");
  }
  @Override
  public void mouseClicked(MouseEvent e) {
  }
  @Override
  public void mouseEntered(MouseEvent e) {
  }
  @Override
  public void mouseExited(MouseEvent e) {
  }
  @Override
  public void mouseMoved(MouseEvent e) {
  }
});
setLayout(new BorderLayout());
add(slideResize);
pack();
validate();

问题是它实际上没有调整大小

enter image description here ReleasedThumb

enter image description here PressedThumb

第3。但是如何实现像JComboBox超越(从边界突出)限制JFrame的行为?

enter image description here

enter image description here

0 个答案:

没有答案