如何在Java Swing中创建二维SplitPane

时间:2016-06-06 09:54:33

标签: java swing split jframe splitpane

我想在Java swing中创建一个二维JSplitpane类设计。 这样JFrame将被分成4个部分,上部和下部被另一个分割分开,左右部分被另一个分割线分开。此外,如果我单击并拖动垂直分割线的任何部分,则整条线应沿拖动方向移动。

ScreenShot

我正在尝试通过在拆分窗格中使用拆分窗格来实现此目的。但是在拖动垂直分割线时,它只会拖动水平线以下或水平分割线以上的组件。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Demo extends JFrame {

int screenwidth=760,screenheigth=550;

JSplitPane top_sp,bottom_sp,main_sp;

JButton b1,b2,b3,b4,b5,b6;
JButton b7,b8,b9,b10;

MailClient(){
    setSize(screenwidth,screenheigth);
    setLayout(new BorderLayout());
    setTitle("Demo");
    setDefaultCloseOperation(EXIT_ON_CLOSE);    
    setLocationRelativeTo(null);

    b1=new JButton("B1");
    b2=new JButton("B2");
    b3=new JButton("B3");
    b4=new JButton("B4");
    b5=new JButton("B5");
    b6=new JButton("B6");
    b7=new JButton("B7");
    b8=new JButton("B8");
    b9=new JButton("B9");
    b10=new JButton("B10");     

    JPanel topleft=new JPanel(new FlowLayout());
    topleft.add(b1);
    topleft.add(b2);

    JPanel topright=new JPanel(new FlowLayout(FlowLayout.CENTER));
    topright.add(b3);
    topright.add(b4);
    topright.add(b5);
    topright.add(b6);

    JPanel bottomleft=new JPanel(new FlowLayout(FlowLayout.CENTER));

    bottomleft.add(b7);
    bottomleft.add(b8);
    bottomleft.add(b9);
    bottomleft.add(b10);

    JPanel bottomright=new JPanel(new FlowLayout(FlowLayout.CENTER));
    bottomright.add(new JLabel("TABLE"));

    top_sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,topleft,topright);
    bottom_sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,bottomleft,bottomright);

    main_sp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,top_sp,bottom_sp);

    add(main_sp,"Center");

    setVisible(true);
}

public static void main(String args[]){
    Demo demo=new Demo();

}

}

3 个答案:

答案 0 :(得分:2)

您可以使用属性更改侦听器来检测移动拆分窗格分隔符的时间,然后设置其他拆分窗格的位置:

TempSen: adt7410@48 {
    compatible = "adt7410","adt7x10";
    reg = <0x48>;
    pinctrl-names = "default";
    pinctrl-1 = <&pinctrl_edt_ft5x06_pins>;
    interrupt-parent = <&gpio3>;
    interrupts = <1 2>;
};

答案 1 :(得分:1)

你必须听取分裂变化:

split.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, 
    new PropertyChangeListener() {
       @Override
       public void propertyChange(PropertyChangeEvent pce) {}
});

(有关详细信息,请参阅Detecting JSplitPane Divider Movement

每当你改变一个JSplitPane的大小时,你也必须改变另一个。

split.setDividerLocation(proportionalLocation);

答案 2 :(得分:1)

您还可以查看Split Pane Synchronizer

这是一个可重用的类,允许您同步2个(或更多)拆分窗格。这些类使用单个PropertyChangeListener来管理分隔符位置的更改,因此您的应用程序代码不需要单独跟踪每个拆分窗格。