java:JSplitpane的问题

时间:2011-02-02 07:39:24

标签: java swing user-interface jsplitpane

我希望在运行程序时有一个jsplitPane和左侧组件交换正确的组件。我将分区位置设为0.2左右。当我交换左侧组件和右侧组件并将分区位置设置为0.8时; jSplitPane存在问题。它是锁定的,我不能移动除数。在那之后;当我尝试将另一个组件分配到JSplitPane的右侧或左侧时,组件显示为bollixed。在交换左右组件之前,我尝试使用setDivisionLocation()方法;但它没有效果。还有repaint()方法.... 请指导我

...问候萨贾德

1 个答案:

答案 0 :(得分:3)

我认为您的问题是您添加了两次组件(这可能会使思考看起来很奇怪)。例如,您执行以下操作:split.setLeftComponent(split.getRightComponent())

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

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);
}

演示在这里(也移动分隔符位置):

before after

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);
}