首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从右侧设置JSplitPane分隔符位置

从右侧设置JSplitPane分隔符位置
EN

Stack Overflow用户
提问于 2021-02-06 02:11:34
回答 2查看 51关注 0票数 0

据我所知,JSplitPane的setDivider()方法可以接受一个从左边算起的绝对位置的整数。例如,someSplitPane.setDivider(120);将从左起设置分频器120px。有没有办法我可以做同样的事情,而不是将分隔符设置为从右侧开始的绝对位置?

简单的实现:

代码语言:javascript
复制
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(来自注释的print语句)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-06 02:36:52

假设您使用EDT正确地创建了图形用户界面,则可以在创建splitPane的类的构造函数中添加以下内容:

代码语言:javascript
复制
SwingUtilities.invokeLater(() ->
{
        Dimension d = splitPane.getSize();
        splitPane.setDividerLocation(d.width - 120);
});

这将向EDT添加代码。因此,在框架可见并为拆分窗格指定大小后,将重置分隔线位置。

票数 1
EN

Stack Overflow用户

发布于 2021-02-06 07:32:33

我对您的代码做了一些更改,并创建了这个GUI。

我使用了JFrame而不是扩展JFrame

我设置的是JSplitPane的首选大小,而不是JFrame。通常,您更关心JSplitPane的大小而不是JFrame的大小。通常,JSplitPane将有两个带有Swing组件的JPanels,因此您不必在此时指定首选大小。

下面是完整的可运行代码。

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;

public class JSplitPaneRight {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new JSplitPaneRight();
        });
    }
    
    public JSplitPaneRight() {
        initComponents();
    }
    
    public void initComponents() {
        JFrame frame = new JFrame("JSplitPane Right");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.add(createSplitPane(), BorderLayout.CENTER);
        
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    
    private JSplitPane createSplitPane( ) {
        JSplitPane splitpane = new JSplitPane();
        splitpane.setPreferredSize(new Dimension(640, 480));
        int width = splitpane.getPreferredSize().width;
        System.out.println(width); // prints 0
        splitpane.setDividerLocation(width - 120);
        
        return splitpane;
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66068450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档