如何在JavaSwing中创建二维SplitPane
我想在JavaSwing中创建一个类似于JSplitpane的二维设计。 这样,如何在JavaSwing中创建二维SplitPane,java,swing,split,jframe,splitpane,Java,Swing,Split,Jframe,Splitpane,我想在JavaSwing中创建一个类似于JSplitpane的二维设计。 这样,JFrame将被分成4个部分,上部和下部由另一个分割线分隔,左侧和右侧由另一条分割线分隔。此外,如果单击并拖动垂直分割线的任何部分,则整个线应沿拖动方向移动 我试图通过在拆分窗格中使用拆分窗格来实现这一点。但在拖动垂直分割线时,它只拖动水平线下方或水平分割线上方的组件 import javax.swing.*; import java.awt.*; import java.awt.event.*; public
JFrame
将被分成4个部分,上部和下部由另一个分割线分隔,左侧和右侧由另一条分割线分隔。此外,如果单击并拖动垂直分割线的任何部分,则整个线应沿拖动方向移动
我试图通过在拆分窗格中使用拆分窗格来实现这一点。但在拖动垂直分割线时,它只拖动水平线下方或水平分割线上方的组件
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();
}
}
您必须听取拆分更改:
split.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent pce) {}
});
(有关更多信息,请参阅)
无论何时更改一个JSplitPane的大小,都必须同时更改另一个JSplitPane
split.setDividerLocation(proportionalLocation);
您可以使用属性更改侦听器检测拆分窗格分隔符何时移动,然后设置其他拆分窗格的位置:
import javax.swing.*;
import java.awt.*;
public class Example extends JFrame {
public Example() {
JPanel topLeftPanel = new JPanel();
JPanel topRightPanel = new JPanel();
JPanel bottomLeftPanel = new JPanel();
JPanel bottomRightPanel = new JPanel();
JSplitPane topPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, topLeftPanel, topRightPanel);
JSplitPane bottomPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, bottomLeftPanel, bottomRightPanel);
topPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, pce -> {
bottomPane.setDividerLocation((int) pce.getNewValue());
});
bottomPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, pce -> {
topPane.setDividerLocation((int) pce.getNewValue());
});
JSplitPane mainPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topPane, bottomPane);
setContentPane(mainPane);
setLocationRelativeTo(null);
setMinimumSize(new Dimension(400, 400));
setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
您也可以查看
这是一个可重用类,允许您同步2个(或更多)拆分窗格。这些类使用一个
PropertyChangeListener
来管理分隔符位置的更改,这样应用程序代码就不需要单独跟踪每个拆分窗格。确保在每个拆分窗格的PropertyChangeListener中,只有当您自己的位置实际发生更改时,才更改另一个拆分窗格的位置(新位置!=旧位置),否则您可能会在两个拆分窗格之间进入无休止的更改循环!