使用3个面板创建JSplitPane

时间:2014-08-31 15:49:49

标签: java swing

我想创建一个窗口,其中包含3个jPanel,由splitPane-s分隔。左侧和右侧应由用户调整大小,中间位置应填充剩余空间。

我已创建它,但如果我移动第一个splitPane,那么第二个也会移动。而且我不确定,如果我使用最好的方法来满足我的需求。

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

public class MyWindow extends JFrame {

    public MyWindow() {
        this.setLayout(new BorderLayout());

        JPanel leftPanel = new JPanel();
        JPanel centerPanel = new JPanel();
        JPanel centerPanel2 = new JPanel();
        JPanel rightPanel = new JPanel();

        JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, centerPanel);
        JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centerPanel2, rightPanel);

        centerPanel.setLayout(new BorderLayout());
        this.add(sp, BorderLayout.CENTER);
        centerPanel.add(sp2, BorderLayout.CENTER);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(500, 500);
        this.setVisible(true);
    }

}

1 个答案:

答案 0 :(得分:1)

您正在做的事情看起来很奇怪,即将centerPanel添加到拆分窗格,然后将拆分窗格添加到centerPane。不确定,但我认为后者否定了前者。

您需要做的就是将第一个拆分窗格添加到第二个拆分窗格。

import java.awt.BorderLayout;
import java.awt.Color;

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

public class MyWindow extends JFrame {

    public MyWindow() {
        this.setLayout(new BorderLayout());

        JPanel leftPanel = new JPanel();
        leftPanel.setBackground(Color.BLUE);
        JPanel centerPanel = new JPanel();
        centerPanel.setBackground(Color.CYAN);
        JPanel rightPanel = new JPanel();
        rightPanel.setBackground(Color.GREEN);

        JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, centerPanel);
        JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp, rightPanel);

        this.add(sp2, BorderLayout.CENTER);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(500, 500);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new MyWindow();
            }
        });
    }
}
相关问题