首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java: JSplitpane的问题

java: JSplitpane的问题
EN

Stack Overflow用户
提问于 2011-02-02 15:39:24
回答 1查看 2.3K关注 0票数 1

我想有一个jsplitPane和交换右组件与左组件,同时运行我的程序。我将分割位置设置为0.2左右。当我交换左组件和右组件并将分区位置设置为0.8左右时,jSplitPane出现了问题。它被锁住了,我不能移动除数。同样在那之后,当我尝试将另一个组件分配给JSplitPane的右侧或左侧时,这些组件显示为粗体。在交换左右组件之前,我尝试过使用setDivisionLocation()方法,但没有效果。还有repaint()方法....请给我指引

regards...sajad

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-02 16:00:27

我认为你的问题是你添加了两次组件(这真的会让think看起来很奇怪)。例如,你可以这样做:split.setLeftComponent(split.getRightComponent())

因此,当您进行交换时,您需要首先删除组件:

代码语言:javascript
复制
private static void swap(JSplitPane split) {
    Component r = split.getRightComponent();
    Component l = split.getLeftComponent();

    // remove the components
    split.setLeftComponent(null);
    split.setRightComponent(null);

    // add them swapped
    split.setLeftComponent(r);
    split.setRightComponent(l);
}

演示在这里(还移动了分隔线的位置):

代码语言:javascript
复制
public static void main(String[] args) {
    JFrame frame = new JFrame("Test");

    final JSplitPane split = new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT, 
            new JLabel("first"), 
            new JLabel("second"));

    frame.add(split, BorderLayout.CENTER);
    frame.add(new JButton(new AbstractAction("Swap") {
        @Override
        public void actionPerformed(ActionEvent e) {
            // get the state of the devider
            int location = split.getDividerLocation();

            // do the swap
            swap(split);

            // update the devider 
            split.setDividerLocation(split.getWidth() - location 
                    - split.getDividerSize());
        }


    }), BorderLayout.SOUTH);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4871874

复制
相关文章

相似问题

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