使用JSplitPane在java中的框架中添加3个面板?

时间:2015-03-28 17:25:56

标签: java swing jframe jpanel jsplitpane

尝试使用JSplitPane将我创建的3个面板添加到Java框架中。尝试了2个面板,这很有效,但有3个仍然没有做我想要的。

已经阅读了关于制作2个JSplitPanes并将其放在另一个中的内容,但这实际上并不适用于我希望它做的事情。

我的代码显示有3个面板,但尺寸都错了..应该填写。

我的代码:

    frame = new JFrame(); // Create a new frame
    frame.setVisible(true); // Makes it visible     
    frame.setSize(900, 500); // Sets size         
    frame.setTitle(""); // Sets title
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null); // Sets the window on the center of the screen   

    temp_panel = new JPanel(); // Creates new JPanel
    water_panel = new JPanel(); // Creates new JPanel
    power_panel = new JPanel(); // Creates new JPanel

    temp_panel.setBackground(Color.decode("#2ecc71")); // Sets color
    water_panel.setBackground(Color.decode("#3498db")); // Sets color
    power_panel.setBackground(Color.decode("#f1c40f")); // Sets color

    temp_label = new JLabel("This is Temperature");
    water_label = new JLabel("This is Water consumption");
    power_label = new JLabel("This is Power consumption");

    // Add labels on panel
    temp_panel.add(temp_label);
    water_panel.add(water_label);
    power_panel.add(power_label); 

    JSplitPane splitPaneLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    JSplitPane splitPaneRight = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    splitPaneLeft.setLeftComponent( temp_panel );
    splitPaneLeft.setRightComponent( water_panel );
    splitPaneRight.setLeftComponent( splitPaneLeft );
    splitPaneRight.setRightComponent( power_panel );

    splitPaneLeft.setEnabled(false);
    splitPaneLeft.setDividerSize(0);

    splitPaneRight.setEnabled(false);
    splitPaneRight.setDividerSize(0);

    // put splitPaneRight onto a single panel
    JPanel panelSplit = new JPanel();
    panelSplit.add( splitPaneRight );

    frame.add(panelSplit, BorderLayout.CENTER);

它应该看起来像这样,但只有3个不同颜色的3个面板而不是2个!

enter image description here

希望有人可以提供帮助

2 个答案:

答案 0 :(得分:2)

如果您不需要在运行时更改组件的相对大小,请不要使用JSplitPane。而是创建一个使用GridLayout的容器JPanel,比如new GridLayout(1, 0)表示1行和可变数量的列,使用JPanel将三个彩色JPanel添加到GridLayout,然后将其添加到JFrame。

答案 1 :(得分:0)

你可以让其中一个面板成为另一个JSplitPane,遗憾的是没有其他解决方案。