如何解决从右侧设置 JSplitPane 分隔符位置
据我所知,JSplitPane 的 setDivider()
方法可以取一个 int,它是从左边开始的绝对位置。例如,someSplitPane.setDivider(120);
会将分隔线设置为距左侧 120 像素。有什么办法可以做同样的事情,但将分隔线设置为从右边开始的绝对位置?
简单实现:
public class Window extends JFrame {
JSplitPane splitpane;
public Window() {
initComponents();
}
private void initComponents() {
setTitle("Debugging");
setDefaultCloSEOperation(WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(640,480));
splitpane = new JSplitPane();
System.out.println(splitpane.getSize().width); // prints 0
splitpane.setDividerLocation(splitpane.getSize().width - 120);
getContentPane().add(splitpane);
}
public static void main(String[] args) {
SwingUtilities.invokelater(() -> {
new Window().setVisible(true);
});
}
}
编辑:我编写了与任何现有代码隔离的代码,并重现了该错误。看起来正在发生的是 JFrame 正在实例化并出现在桌面上,然后大约一秒钟后,0(来自注释的打印语句)输出到控制台。
解决方法
假设您使用 EDT 正确创建了 GUI,您可以在创建 splitPane 的类的构造函数中添加以下内容:
struct
这会将代码添加到 EDT。因此,在框架可见并为拆分窗格指定大小后,分隔符位置将被重置。
,我对您的代码进行了一些更改并创建了此 GUI。
我使用了 $stmt = $this->pdo->prepare('SELECT FOUND_ROWS() AS total_rows');
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['total_rows'];
而不是扩展 JFrame
。
我设置了 JFrame
的首选大小,而不是 JSplitPane
。通常,您更关心 JFrame
的大小而不是 JSplitPane
。通常,JFrame
将有两个带有 Swing 组件的 JSplitPane
,因此您不必在此时指定首选大小。
这是完整的可运行代码。
JPanels
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。