Javaswing布局详解附示例图.docx
- 文档编号:6696143
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:10
- 大小:96.94KB
Javaswing布局详解附示例图.docx
《Javaswing布局详解附示例图.docx》由会员分享,可在线阅读,更多相关《Javaswing布局详解附示例图.docx(10页珍藏版)》请在冰豆网上搜索。
Javaswing布局详解附示例图
当选择使用JPanel和顶层容器的contentpane时,需要考虑布局管理。
JPanel缺省是初始化一个FlowLayout,而contentpane缺省是初始化一个BorderLayout。
下面将分别介绍几种最常用的布局管理器:
FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。
代码演示
每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。
这些文件主要有三个方法组成:
addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。
Java代码
1publicstaticvoidaddComponentsToPane(Containerpane){。
。
。
}
2/**
3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。
4*/
5privatestaticvoidcreateAndShowGUI(){
6//Createandsetupthewindow.
7JFrameframe=newJFrame("FlowLayoutDemo");
8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
9//Setupthecontentpane.
10addComponentsToPane(frame.getContentPane());
11//Displaythewindow.
12frame.pack();
13frame.setVisible(true);
14}
15//main()程序入口,单独起一个线程,实例化UI。
16publicstaticvoidmain(String[]args){
17javax.swing.SwingUtilities.invokeLater(newRunnable(){
18publicvoidrun(){
19createAndShowGUI();
20}
21});
22}
FlowLayout
FlowLayout类是最简单的布局管理器。
它按照和页面上排列单词的类似方式来安排组件----从左到右,直至没有多余的空间,然后转到下一行。
效果:
内容面板代码:
Java代码
23publicstaticvoidaddComponentsToPane(Containerpane){
24pane.setLayout(newFlowLayout());
25pane.add(newJButton("Button1"));
26pane.add(newJButton("Button2"));
27pane.add(newJButton("Button3"));
28pane.add(newJButton("Long-NamedButton4"));
29pane.add(newJButton("5"));
30}
BorderLayout
一个BorderLayout对象将界面分成五大区域,分别用BorderLayout类的静态常量指定:
-PAGE_START
-PAGE_END
-LINE_START
-LINE_END
-CENTER
效果:
内容面板代码:
Java代码
31publicstaticvoidaddComponentsToPane(Containerpane){
32JButtonbutton=newJButton("Button1(PAGE_START)");
33pane.add(button,BorderLayout.PAGE_START);
34button=newJButton("Button2(CENTER)");
35button.setPreferredSize(newDimension(200,100));
36pane.add(button,BorderLayout.CENTER);
37button=newJButton("Button3(LINE_START)");
38pane.add(button,BorderLayout.LINE_START);
39button=newJButton("Long-NamedButton4(PAGE_END)");
40pane.add(button,BorderLayout.PAGE_END);
41button=newJButton("5(LINE_END)");
42pane.add(button,BorderLayout.LINE_END);
43}
BoxLayout
BoxLayout可以将组件由上至下或由左至右依次加入当前面板。
效果:
内容面板代码:
Java代码
44publicstaticvoidaddComponentsToPane(Containerpane){
45JPanelxPanel=newJPanel();
46xPanel.setLayout(newBoxLayout(xPanel,BoxLayout.X_AXIS));
47addButtons(xPanel);
48JPanelyPanel=newJPanel();
49yPanel.setLayout(newBoxLayout(yPanel,BoxLayout.Y_AXIS));
50addButtons(yPanel);
51
52pane.add(yPanel,BorderLayout.PAGE_START);
53pane.add(xPanel,BorderLayout.PAGE_END);
54}
55
56privatestaticvoidaddAButton(Stringtext,Containercontainer){
57JButtonbutton=newJButton(text);
58button.setAlignmentX(Component.CENTER_ALIGNMENT);
59container.add(button);
60}
61
62privatestaticvoidaddButtons(Containercontainer){
63addAButton("Button1",container);
64addAButton("Button2",container);
65addAButton("Button3",container);
66addAButton("Long-NamedButton4",container);
67addAButton("5",container);
68}
CardLayout
卡片布局和其他布局不同,因为它隐藏了一些组件。
卡片布局就是一组容器或者组件,它们一次仅仅显是一个,组中的每个容器称为卡片。
效果:
内容面板代码:
Java代码
69publicvoidaddComponentToPane(Containerpane){
70finalJPanelcontentPanel=newJPanel();
71JPanelcontrolPanel=newJPanel();
72finalCardLayoutcardLayout=newCardLayout();;
73pane.setLayout(newBorderLayout());
74pane.add(contentPanel,BorderLayout.CENTER);
75pane.add(controlPanel,BorderLayout.PAGE_END);
76controlPanel.setLayout(newFlowLayout());
77
78JButton[]b=newJButton[10];
79for(inti=0;i<10;i++){
80b[i]=newJButton("No."+i);
81contentPanel.add(b[i]);
82}
83contentPanel.setLayout(cardLayout);
84JButtonnextButton=newJButton("next");
85nextButton.addActionListener(newActionListener(){
86publicvoidactionPerformed(ActionEvente){
87cardLayout.next(contentPanel);
88}});
89controlPanel.add(nextButton);
90}
GridLayout
GridLayout让你建立一个组件表格,并且当组件加入时,会依序又左至右,由上至下填充到每个格子,它不能由你指定想放那个格子就放那个格子
效果:
内容面板代码:
Java代码
91publicstaticvoidaddComponentsToPane(Containerpane){
92JButton[]buttons=newJButton[9];
93pane.setLayout(newGridLayout(3,3));
94for(inti=0;i 95buttons[i]=newJButton(i+""); 96pane.add(buttons[i]); 97} 98} GridBagLayout GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的。 GridBagLayout同GridLayout一样,在容器中以网格形式来管理组件。 但GridBagLayout功能要来得强大得多。 1、GridBagLayout管理的所有行和列都可以是大小不同的; 2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样: 组件在容器中可以占据任意大小的矩形区域。 GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints。 其中有11个公有成员变量,GridBagConstraints可以从这11个方面来进行控制和操纵。 这些内容是: 1、gridx—组件的横向坐标; 2、girdy—组件的纵向坐标; 3、gridwidth—组件的横向宽度,也就是指组件占用的列数; 4、gridheight—组件的纵向长度,也就是指组件占用的行数; 5、weightx—指行的权重,告诉布局管理器如何分配额外的水平空间; 6、weighty—指列的权重,告诉布局管理器如何分配额外的垂直空间; 7、anchor—当组件小于其显示区域时使用此字段; 8、fill—如果显示区域比组件的区域大的时候,可以用来控制组件的行为。 控制组件是垂直填充,还是水平填充,或者两个方向一起填充; 9、insets—指组件与表格空间四周边缘的空白区域的大小; 10、ipadx—组件间的横向间距,组件的宽度就是这个组件的最小宽度加上ipadx值; 11、ipady—组件间的纵向间距,组件的高度就是这个组件的最小高度加上ipady值。 说明: 1、gridx,gridy: 其实就是组件行列的设置,注意都是从0开始的,比如gridx=0,gridy=1时放在0行1列; 2、gridwidth,gridheight: 默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间; 3、weightx,weighty: 当窗口变大时,设置各组件跟着变大的比例。 比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1: 2的比例分配给组件A和B; 4、anchor: 当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。 5、insets: 设置组件之间彼此的间距。 它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。 效果: 内容面板代码: Java代码 99publicstaticvoidaddComponentsToPane(Containerpane){ 100JButtonbutton; 101pane.setLayout(newGridBagLayout()); 102GridBagConstraintsc=newGridBagConstraints(); 103 104button=newJButton("Button1"); 105c.fill=GridBagConstraints.HORIZONTAL; 106c.gridx=0; 107c.gridy=0; 108pane.add(button,c); 109 110button=newJButton("Button2"); 111c.fill=GridBagConstraints.HORIZONTAL; 112c.weightx=0.5; 113c.gridx=1; 114c.gridy=0; 115pane.add(button,c); 116 117button=newJButton("Button3"); 118c.fill=GridBagConstraints.HORIZONTAL; 119c.weightx=0.5; 120c.gridx=2; 121c.gridy=0; 122pane.add(button,c); 123 124button=newJButton("Long-NamedButton4"); 125c.fill=GridBagConstraints.HORIZONTAL; 126c.ipady=40;//makethiscomponenttall 127c.weightx=0.0; 128c.gridwidth=3; 129c.gridx=0; 130c.gridy=1; 131pane.add(button,c); 132 133button=newJButton("5"); 134c.fill=GridBagConstraints.HORIZONTAL; 135c.ipady=0;//resettodefault 136c.weighty=1.0;//requestanyextraverticalspace 137c.anchor=GridBagConstraints.PAGE_END;//bottomofspace 138c.insets=newInsets(10,0,0,0);//toppadding 139c.gridx=1;//alignedwithbutton2 140c.gridwidth=2;//2columnswide 141c.gridy=2;//thirdrow 142pane.add(button,c); 143} 一个GardBagLayout布局的左右选择框,代码GridBagLayoutFrame.java见附件,效果: 本文出自“子孑”博客,请务必保留此出处
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Javaswing 布局 详解 示例