【问题标题】:Get knob/thumb postion JScrollPane获取旋钮/拇指位置 JScrollPane
【发布时间】:2020-10-02 04:59:44
【问题描述】:

我需要在 JScrollPane 中获取旋钮/拇指的确切中间或顶部,因此当前聚焦的组件(具有黄色背景的组件)将跟随拇指。有可能吗?

ps。很抱歉错过了代码示例,但实现相当大。

【问题讨论】:

  • 我想你需要举个例子。应该不会太难。一个 ScrollPane 和某种列表/框布局。

标签: java swing jpanel jscrollpane


【解决方案1】:

也许有一种方法可以抓住滚动窗格的拇指/旋钮,但我不知道。这是一种几何方式来找到你所追求的东西。

我们将添加一个调整监听器,然后获取滑块的值。根据该值,我们可以计算滑块移动的场景比例。然后我们得到滚动条的高度,我们可以用分数找到旋钮的位置。

double relativePositionOnScreen = height*model.getValue()/(model.getMaximum() - model.getMinimum());

屏幕上旋钮的位置必须相对于视口移动,因此我们只需将值添加到该位置即可。

这里是一个示例,带有一个滚动窗格,滚动窗格内部是一个面板,在旋钮后面有一个框。

import javax.swing.*;
import java.awt.Dimension;
import java.awt.Component;
import java.awt.geom.*;
import java.awt.Graphics;
import java.awt.Graphics2D;

public class ScrollByMe{
    public static void main(String[] args){
        Rectangle2D rect = new Rectangle2D.Double(0, 0, 0, 0);
        JFrame frame = new JFrame("scroll by me");
        JPanel panel = new JPanel(){
            @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                ((Graphics2D)g).draw(rect);
            }
        };

        panel.setPreferredSize( new Dimension(200, 800) );
        JScrollPane scroller = new JScrollPane( panel);
        JScrollBar bar = scroller.getVerticalScrollBar();

        bar.addAdjustmentListener( e ->{
            BoundedRangeModel model = bar.getModel();
            Dimension d = bar.getSize();
            double height = d.getHeight();
            double buttonHeight = model.getExtent() * height / (model.getMaximum() - model.getMinimum());
            //maximum *value* range.
            double relativePositionOnScreen = height*model.getValue()/(model.getMaximum() - model.getMinimum());
            rect.setRect( 40, model.getValue() + relativePositionOnScreen, 40, buttonHeight);
            panel.repaint();
        });

        frame.add(scroller);
        frame.setSize(200, 400);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

【讨论】:

  • 您为此付出了很多努力来解决一些难以解决的问题,我同意,拇指组件是难以获得参考的东西(我试过)1+
猜你喜欢
  • 2018-01-04
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2020-06-18
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多