《Java编程思想》读书笔记(6)

本文详细介绍了Java中常用的布局管理器,包括GridLayout、BorderLayout、FlowLayout及BoxLayout的特点和使用方法,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JButton这一章,Brucke只给出了一个简单的例子,代码如下:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importjava.applet.Applet;
importjava.awt.*;

importjavax.swing.*;

publicclassTestextendsJApplet
{
privateJButtonbtn1;
privateJButtonbtn2;
/**
*
@paramargs
*/
publicvoidinit()
{
this.btn1=newJButton("确定");
this.btn2=newJButton("重置");
Containercon
=this.getContentPane();
con.setLayout(
newFlowLayout());

con.add(btn1);
con.add(btn2);



}
publicstaticvoidmain(String[]args)
{
Testt1
=newTest();
Console.run(t1,
300,300);

}

}

这一节没有过多的东西可以思考,但布局管理器的知识值得去深究。<?xml:namespace prefix = o />

Java语言中提供的布局管理器种类有:边界式布局、卡片式布局、流式布局和网格式布局等,各有不同的特点,可根据实际 需要选用;但有最大自由设计空间的是无布局管理器”——即不使用任何布局格式,而通过手工方式添加组件到页面布局的绝对位置上。因此我采用“无布局管理器”将他的代码改写如下:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importjava.applet.Applet;
importjava.awt.*;

importjavax.swing.*;

publicclassTestextendsJApplet
{
privateJButtonbtn1;
privateJButtonbtn2;
/**
*
@paramargs
*/
publicvoidinit()
{
this.btn1=newJButton("确定");
this.btn2=newJButton("重置");
Containercon
=this.getContentPane();
//con.setLayout(newFlowLayout());
con.setLayout(null);
btn1.reshape(
30,30,100,100);
btn2.reshape(
150,150,100,100);

con.add(btn1);
con.add(btn2);



}
publicstaticvoidmain(String[]args)
{
Testt1
=newTest();
Console.run(t1,
600,600);

}

}


1.GridLayout

GridLayout类是布局管理器之一,它将容器中的组件在放置在一个矩形网格中。容器被划分为相同大小的矩形,而每个组件就放置在一个单独的矩形中。

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importjava.awt.*;
importjavax.swing.*;

publicclassGridFormextendsJFrame
{

/**
*
@paramargs
*/
publicstaticvoidmain(String[]args)
{
//TODOAuto-generatedmethodstub
GridFormgf=newGridForm();
gf.setLayout(
newGridLayout(3,2));
Containercon
=gf.getContentPane();
con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

con.add(
newJButton("1"));
con.add(
newJButton("2"));
con.add(
newJButton("3"));
con.add(
newJButton("4"));
con.add(
newJButton("5"));
con.add(
newJButton("6"));

gf.setTitle(
"GridLayout例子");
gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gf.setSize(
200,200);
gf.setVisible(
true);


}

}

如果容器的ComponentOrientation属性是水平的并且从左到右,上面例子产生如下图1

如果容器的ComponentOrientation属性是horizontal right-to-left,结果就如下图2

当行数和列数都被设置为非零值(不管是通过构造函数或者通过setRowssetColumns方法来设置),指定的列数就会被忽略掉。例如说,如果指定是33列,而将布局中放置9个组件,它们就会显示为33列。

2.BorderLayout

边界布局会把容器看成五个:部分:north, south, east, west, center。每个区域最多包含一个组件,重要的五个常量:NORTH, SOUTH, EAST, WESTCENTER


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> Panelp=newPanel();
p.setLayout(
newBorderLayout());
p.add(
newButton("Okay"),BorderLayout.SOUTH);
==================================================
==================================================

Panelp2
=newPanel();
p2.setLayout(
newBorderLayout());
p2.add(
newTextArea());//Sameasp.add(newTextArea(),BorderLayout.CENTER);
<!--[endif]-->

BorderLayout 支持相对定位常量, PAGE_START, PAGE_END, LINE_START, and LINE_END. 在一个容器中,如果它的 ComponentOrientation 被设置为ComponentOrientation.LEFT_TO_RIGHT,这些常量就分别映射为 NORTH, SOUTH, WEST, and EAST

为了与以前兼容,BorderLayout也好汉相对定位常量 BEFORE_FIRST_LINE, AFTER_LAST_LINE, BEFORE_LINE_BEGINS and AFTER_LINE_ENDS. 他们分别和PAGE_START, PAGE_END, LINE_START and LINE_END等价.

如果同时使用绝对定位和相对定位,就会产生不可预测的结果。例如,如果你在容器中同时使 NORTH PAGE_START 常量 来添加组件,而容器的 方向是 LEFT_TO_RIGHT, 那么就只有PAGE_START被会布局。


import
java.awt.*;
importjavax.swing.*;

publicclassGridFormextendsJFrame
{

/**
*
@paramargs
*/
publicstaticvoidmain(String[]args)
{
//TODOAuto-generatedmethodstub
GridFormgf=newGridForm();
gf.setLayout(
newBorderLayout());
Containercon
=gf.getContentPane();
con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

con.add(
newJButton("North"),BorderLayout.NORTH);
con.add(
newJButton("SOUTH"),BorderLayout.SOUTH);
con.add(
newJButton("EAST"),BorderLayout.EAST);
con.add(
newJButton("WEST"),BorderLayout.WEST);
con.add(
newJButton("CENTER"),BorderLayout.CENTER);

gf.setTitle(
"BorderLayout例子");
gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gf.setSize(
200,200);
gf.setVisible(
true);
}

}


3. FlowLayout

FlowLayout会将组件从左到右进排列,就象文章中的文本行一样。流布局一般用在面板中的按纽的放置。它将会将按纽以从左至右的方式排放,直到在同一行中再也放不下更多的按纽了。

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importjava.awt.*;
importjavax.swing.*;

publicclassGridFormextendsJFrame
{

/**
*
@paramargs
*/
publicstaticvoidmain(String[]args)
{
//TODOAuto-generatedmethodstub
GridFormgf=newGridForm();
//gf.setLayout(newBorderLayout());
gf.setLayout(newFlowLayout());
Containercon
=gf.getContentPane();
con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

con.add(
newJButton("North"));
con.add(
newJButton("SOUTH"));
con.add(
newJButton("EAST"));
con.add(
newJButton("WEST"));
con.add(
newJButton("CENTER"));

gf.setTitle(
"FlowLayout例子");
gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gf.setSize(
200,200);
gf.setVisible(
true);


}

}

4.BoxLayout

BoxLayout能让你在垂直和水平两个方向上控制组件的摆放,它用一些被称为支柱(struts)胶水(glue)的东西来控制组件间的距离。

None.gifpackagecom.vitamin.UI;
None.gif
None.gifimportjavax.swing.
*;
None.gifimportjava.awt.
*;
None.gifimportcom.vitamin.
*;
None.gifimportcom.vitamin.Console.console;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
publicclassBoxLayout1extendsJAppletdot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidinit()dot.gif{
InBlock.gifJPaneljpv
=newJPanel();
InBlock.gifjpv.setLayout(
newBoxLayout(jpv,BoxLayout.Y_AXIS));
InBlock.gif
for(inti=0;i<5;i++)
InBlock.gifjpv.add(
newJButton("jpv"+i));
InBlock.gifJPaneljph
=newJPanel();
InBlock.gifjph.setLayout(
newBoxLayout(jph,BoxLayout.X_AXIS));
InBlock.gif
for(inti=0;i<5;i++)
InBlock.gifjph.add(
newJButton("jph"+i));
InBlock.gifContainercp
=getContentPane();
InBlock.gifcp.add(BorderLayout.EAST,jpv);
InBlock.gifcp.add(BorderLayout.SOUTH,jph);
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicstaticvoidmain(String[]args)dot.gif{
InBlock.gifconsole.run(
newBoxLayout1(),450,200);
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}
6-4-1.GIF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值