当前位置: 首页 > 面试题库 >

如何隐藏jSlider的旋钮?

魏航
2023-03-14
问题内容

我需要自定义JSlider的旋钮。我需要将自己的旋钮图像放在Jslider的默认旋钮上。问题是当前有两个旋钮在响应。一个是我自己的旋钮,另一个是默认旋钮。请告诉我如何隐藏默认旋钮或任何其他解决方案。

下面的代码用于执行此操作。

public class ImageTest {

 JSlider slider;
 JLabel label;

 public ImageTest()
 {

  JPanel panel = new BackgroundPanel();

  slider = new BackgroundSlider();

  slider.setMaximum(300);
  slider.setMinimum(0);
  slider.setValue(50);

  slider.setExtent(10);
  slider.addChangeListener(new MyChangeAction());
  label = new JLabel("50");
  panel.setLayout(new GridBagLayout());

  panel.setSize(797,402);
  slider.setOpaque(false);
  slider.setPaintTrack(false);

  label.setOpaque(false);

  slider.setPreferredSize(new Dimension(340, 20));

  GridBagConstraints gridBagConstraintsSlider = new GridBagConstraints();
  gridBagConstraintsSlider.gridy = 0;
  gridBagConstraintsSlider.gridx = 0;
  gridBagConstraintsSlider.fill = GridBagConstraints.HORIZONTAL;
  gridBagConstraintsSlider.insets = new Insets(0, 283, 260, 0);


  GridBagConstraints gridBagConstraints = new GridBagConstraints();
  gridBagConstraints.gridy = 0;
  gridBagConstraints.gridx = 1;
  gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
  gridBagConstraints.insets = new Insets(0, 50, 240, 0);

  panel.add(slider, gridBagConstraintsSlider);
  panel.add(label, gridBagConstraints);

  JFrame frame = new JFrame();
  frame.getContentPane().add(panel);
  frame.setSize(797,402);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  WindowUtil.locateCenter(frame);
 }

 public static void main(String[] args) {
  ImageTest im= new ImageTest();
 }

 public class MyChangeAction implements ChangeListener{
  public void stateChanged(ChangeEvent ce){
   int value = slider.getValue();
   String str = Integer.toString(value);
   label.setText(str);
   if(value==300)
   {
    label.setText("Max");
   }

  }
 }

}



class BackgroundSlider extends JSlider
{
 Image image;
 public BackgroundSlider()
 {
  try
  {
   image = javax.imageio.ImageIO.read(new File("slider.png"));
  }
  catch (Exception e) { /*handled in paintComponent()*/ }
 }

 protected void paintComponent(Graphics g)
 {
  super.paintComponent(g); 
  if (image != null)
   g.drawImage(image, this.getValue(),(int)this.getAlignmentY(),10,20,this);


  g.setColor(Color.RED); 
  //draw a centered horizontal line 
  g.drawRect(15,this.getHeight()-1,this.getValue(),this.getHeight()+2); 
  g.fillRect(15,this.getHeight()-1,this.getValue(),this.getHeight()+2);

 }
}

感谢Jyoti


问题答案:

要隐藏旋钮,请Slider.horizontalThumbIcon使用空白图标覆盖UIManager的属性,如下所示:

public static void main(String[] args) throws Exception {

    UIManager.getLookAndFeelDefaults().put("Slider.horizontalThumbIcon",new Icon(){
        @Override
        public int getIconHeight() {
            return 0;
        }
        @Override
        public int getIconWidth() {
            return 0;
        }
        @Override
        public void paintIcon(Component c, Graphics g, int x, int y) {
            //do nothing
        }
    });

    JFrame f = new JFrame();
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 15);
    slider.setMajorTickSpacing(10);
    slider.setMinorTickSpacing(1);
    slider.setPaintTicks(true);
    slider.setPaintLabels(true);

    f.add(slider);
    f.setSize(200,200);
    f.setVisible(true);

}


 类似资料:
  • 问题内容: 单击Dialog_01的按钮 将隐藏 其窗口并打开Dialog_02。单击Dialog_02的按钮应 关闭 其窗口并 取消隐藏Dialog_01。如何实现呢? 问题答案: 将第一个窗口作为第二个窗口的父窗口: 如果您希望每次都显示相同的对话框,请执行以下操作: 和子窗口,而不是关闭它。

  • 我有一个按钮:当我点击它时,它会发送一个ajax请求,然后,javascript代码在完成后将类“隐藏”添加到这个按钮上。 我怎么能等待ajax请求结束?发送单击命令后,我认为Selenium应该检测到按钮中何时添加了“隐藏”类,但我不知道如何检测。 你能帮我吗? 它不工作(我有一个超时):

  • 我正在Java中实现一个简单的水平JSlider。没有刻度线之类的东西。可能是人类所能想象的那么简单。 当我试图通过鼠标拖动JSlider左右“移动”它时,它的数值确实会更新(我设置了print语句来报告滑块的变化值,这些值看起来很好)。

  • 我有一个javascript函数,可以动态创建一个按钮,该按钮的ID调用一个使其唯一的值。 因为它有一个调用值的id,所以在某些情况下,我将如何使用方法来隐藏这个按钮?

  • 我有一个代码与许多评论,我如何可以隐藏这些,但没有删除,我需要他们之后。

  • 我有一个非常简单的窗口,它包含一个按钮:。 在main函数中,我设置了我的并且在按钮监听器中,我想关闭窗口,所以我将可见性设置为false:之后,我执行以防止在多次运行程序时可能出现的内存泄漏。 我有两个问题: 在上述情况下,我真的需要吗? 如果我有这个作为