Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane无法正确滚动:scrollRectToVisible是否出现问题?_Java_Swing_Jscrollpane - Fatal编程技术网

Java JScrollPane无法正确滚动:scrollRectToVisible是否出现问题?

Java JScrollPane无法正确滚动:scrollRectToVisible是否出现问题?,java,swing,jscrollpane,Java,Swing,Jscrollpane,我在GUI的一部分上进行了以下基本设置: 玻璃窗 在它上面,是一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个面板上,有一堆ob面板 我正在尝试滚动到已高亮显示的面板。。。这几乎奏效。 当前,如果面板在底部仅显示一半,则滚动窗格将滚动以使其完全可见。。伟大的 如果它在顶部有一半可见,则不会。。。我可以接受。 但是,如果底部的一个完全不可见的面板高亮显示,系统不会评论,但也不会滚动到那里

我在GUI的一部分上进行了以下基本设置:

玻璃窗 在它上面,是一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个面板上,有一堆ob面板

我正在尝试滚动到已高亮显示的面板。。。这几乎奏效。 当前,如果面板在底部仅显示一半,则滚动窗格将滚动以使其完全可见。。伟大的 如果它在顶部有一半可见,则不会。。。我可以接受。 但是,如果底部的一个完全不可见的面板高亮显示,系统不会评论,但也不会滚动到那里

            if(selectedPanel!=null){
            Rectangle targetRectangle = new Rectangle(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());
            Rectangle r = scrollPane.getVisibleRect();
            if (!r.contains(targetRectangle)) {
                tablePanel.scrollRectToVisible(targetRectangle);
            }
        }
不幸的是,我不能100%确定当第二个至最后一个面板被选中而不可见时它的行为,因为如果没有一些代码练习,我无法实现这一点;也许有人能帮我提供一些信息

  • 您必须比较来自/返回
    JViewport
    (来自
    JScrollPane
    的可见矩形),而不是来自
    JScrollPane

  • 使用
    selectedPanel.getBounds
    而不是
    (selectedPanel.getX()、selectedPanel.getY()、selectedPanel.getWidth()、selectedPanel.getHeight())

  • 仍然没有居中,必须将
    JVievports
    selectedPanel
    2

  • 与使用单个代码行
    JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())的结果相同。

  • 为了获得更好的帮助,请尽快发布一个简短、可运行、可编译的
    SSCCE
    /
    MCVE


  • 如果你不尽快得到帮助,考虑创建和发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码,但是仍然显示出你的问题。非常好的朋友。1+1)这是有道理的,是的。。谢谢2) 啊,好吧,这当然让它更容易阅读!!!1号似乎已经帮到了。。。在某些情况下,我仍然会有副作用,但我认为这些都是由我不得不将面板推入的系统造成的。哦,是的,我会很好,在将来可能的情况下,尽可能地在SSCCE/MCVE上工作:)@Layna 1,2.从SSCCE/MCVE总是可以捕捉到一切(几乎)Ok,所有进一步的问题都必须来自外部。。。我确实做了一个小程序来测试滚动代码,现在它可以工作了。。。再次提醒一下答案:3是正确的,但我们决定不总是居中,因为它会让事情变得过于紧张。4:如果我们不检查是否需要滚动,事情会跳得到处都是,让我们看得头晕目眩,所以没有一行解决方案,就像它本来应该是一样整洁:)