1

プログラムの実行中に、jsplitPane を使用して、右側のコンポーネントを左側のコンポーネントで交換したいと考えています。分割位置は0.2程度に設定しています。左のコンポーネントと右のコンポーネントを交換し、分割位置を約 0.8 に設定したとき。jSplitPane に問題があります。ロックされていて、除数を動かすことができません。その後も。JSplitPane の右側または左側に別のコンポーネントを割り当てようとすると、コンポーネントがぼやけて表示されます。左右のコンポーネントを交換する前に setDivisionLocation() メソッドで試しました。しかし、それは効果的ではありません。また、 repaint() メソッド....私を案内してください

よろしく...サジャド

4

1 に答える 1

3

あなたの問題は、コンポーネントを2回追加することだと思います(それは本当に奇妙に見える可能性があります)。たとえば、次のようにします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);
}

そしてデモはここにあります(仕切りの場所も移動します):

前 後

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);
}
于 2011-02-02T08:00:26.887 に答える