Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 在执行JFrame.pack()之后,如何保存JScrollPane位置?_Java_Swing_Jframe_Jscrollpane - Fatal编程技术网

Java 在执行JFrame.pack()之后,如何保存JScrollPane位置?

Java 在执行JFrame.pack()之后,如何保存JScrollPane位置?,java,swing,jframe,jscrollpane,Java,Swing,Jframe,Jscrollpane,我有以下代码: JFrame frame = new JFrame(); JScrollPane scrollPane = new JScrollPane(new panel(with stuff in it)); frame.getContentPane().add(scrollPane); int val = scrollPane.getVerticalScrollBar().getValue(); frame.pack(); scrollPane.getVerticalScrollBar

我有以下代码:

JFrame frame = new JFrame();
JScrollPane scrollPane = new JScrollPane(new panel(with stuff in it));
frame.getContentPane().add(scrollPane);
int val = scrollPane.getVerticalScrollBar().getValue();
frame.pack();
scrollPane.getVerticalScrollBar().setValue(val);
因此,用户滚动一点,然后单击我面板上的链接,然后我执行一个pack(),因此我尝试以下代码:

JFrame frame = new JFrame();
JScrollPane scrollPane = new JScrollPane(new panel(with stuff in it));
frame.getContentPane().add(scrollPane);
int val = scrollPane.getVerticalScrollBar().getValue();
frame.pack();
scrollPane.getVerticalScrollBar().setValue(val);

但是,这段代码仍然将滚动条返回到开始处,而不是保持它最初在打包之前的位置。任何想法都将不胜感激,谢谢

尝试将setValue()方法包装在SwingUtilities.invokeLater()中。

您的
int val
包含什么?它是正确的值吗?没有软件包它能工作吗?@jzd:Yes val持有正确的值,没有软件包它也能工作。发布你的SSCCE()来演示这个问题。好奇:你为什么要做软件包()?只是问问。。frame.pack()不会忽略滚动条的位置吗