Z寒火 2023-09-22 15:15 采纳率: 56%
浏览 4
已结题

javaGUI界面中JScrollPane和JScrollBar之间的问题。

JScrollPane scrollPane=new JScrollPane(check);
JScrollBar scrollBar = new JScrollBar(JScrollBar.VERTICAL, 0,
                100, 0, 2800));
        scrollBar.addAdjustmentListener(new AdjustmentListener() {

            public void adjustmentValueChanged(AdjustmentEvent e) {
                double y = e.getValue();
                System.out.println(y);
            }
        });
scrollPane.setVerticalScrollBar(scrollBar );

System.out.println("check:   "+check.getPreferredSize().height);
System.out.println("scrollpane:   "+scrollPane.getPreferredSize().height);
System.out.println("滑块:   "+Chart.scrollBarVer.getMaximum());
System.out.println("extent:   "+Chart.scrollBarVer.getModel().getExtent());

这段代码在将scrollBar绑定到scrollPane后,滑块拖到底只能输出到2606。最后的4个输出为3336 3354 2800 100。主要是绑定到scrollPane后滑块变大了,滑到底也没法到最大。该如何解决?

public void adjustmentValueChanged(AdjustmentEvent e) {
      double y = e.getValue();
    scrollBar.getModel().setExtent(100);
    plot.getRangeAxis().setRange(-2*targetRange-y, targetRange-y);
    System.out.println(y);
}

在监听中加入scrollBar.getModel().setExtent(100);,但滑块滑到2606,即便继续滑,还是输出2606.

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-22 19:01
    关注

    【以下回答由 GPT 生成】

    这个问题可能是由于视图组件(check)的大小超过了scrollPane的可见区域而导致的。为了解决这个问题,你可以尝试以下步骤:

    1. 确保视图组件(check)的大小正确设置。可以使用setPreferredSize方法来设置check的大小。

    java check.setPreferredSize(new Dimension(width, height));

    其中widthheight是check组件的宽度和高度。

    1. 在创建scrollPane时,使用ScrollPaneConstants指定滚动条的延伸策略。

    java JScrollPane scrollPane = new JScrollPane(check, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

    这样可以确保垂直滚动条始终可见。

    1. 在创建scrollBar时,设置滚动条的最大值为check组件的高度。

    java JScrollBar scrollBar = new JScrollBar(JScrollBar.VERTICAL, 0, 100, 0, check.getPreferredSize().height);

    这样可以确保滑块的最大值和check组件的高度一致。

    1. 在AdjustmentListener中,将视图组件(check)的位置根据滚动条的值进行调整。

    java scrollBar.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { double y = e.getValue(); check.setLocation(check.getX(), (int) -y); } });

    这样可以通过改变check组件的位置来实现滚动效果。

    请尝试以上步骤来解决你的问题。如果还存在问题,请提供更多相关的代码,以便更好地理解和解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程