组件的性质及容器小结

f.setBounds(40,30,250,200);等价于
f.setSize(250,200);
f.setLocation(40,30);
直接子类化Component创建的控件称为轻量级组件,因为在本机窗口系统中没有与之相关联的窗口,因此系统开销较少.轻量级组件并没有自己的窗口,而是借用其父窗口一部分区域,这样做的一个重要结果就是,如果轻量级组件不填充其背景,那么该窗口中将显示出其父窗口的内容. 这意味着它可以是透明的,该事实可以用来增强显示效果.
JComponent是大多数的Swing组件的祖先,但并非所有.其例外包括JFrame,JDialog,JWindow和JApplet,它们都是从对应的AWT类派生的.另外还有Box,它派生自Container.因此这些组件不是轻量级的.

无论组件是否是轻量级的,都有几个重要的属性:如下:
位置
大小
背景和前景色
字体
可见性
启用或无效状态

位置:
可以用Component的getLocation或getBounds方法.前者返回一个Point对象,包含x和y坐标.后者返回一个Rectangle对象,同时包含组件的位置和大小.
同理,可以使用setBounds和setLocation来调整组件的位置和大小.如
f.setBounds(40,50,250,200)
f.setBounds(new Rectangle(40,50,250,200));
若组件排生自JComponent,还可使用另外两种形式的getLocation和getBounds方法
public Point getLocation(Point pos);
public Rectangle getBounds(Rectangle rect);
这样可以不用每次都创建一个新的Point对象,可提高效率.如
JComponent[] comp=..... //得到一组件列表
Point p=new Point();
for(int i=; i<count; i++)
{
 p=comp[i]=getLocation(p);
 System.out.println("position is "+p);
}


通过下列语句将按钮放置在窗体上
Container cp=f.getContentPane();
cp.setLayout(new FlowLayout());
cp.add(b);
一个按钮若调用getLocation,返回的坐标是相对于content pane的,而不是相对于Frame或整个screen的.

大小:
可使用getSize或getBounds获得
public Dimension getSize(); //包含了组件的宽度和高度
public Rectangle getBounds();
若派生自JComponent,还有下列方法
public Dimension getSize(Dimension size);
public Rectangle getBounds(Rectangle rect);

调整窗体大小:
若不允许用户调整窗体或对话框大小,可使用setResizable.如
JFrame f=new JFrame("fixed size frame");
f.setResizable(false);  //此操作只可限制用户,程序代码仍可改变大小
若想让窗口填满整个屏幕,则指定与屏幕本身相匹配的大小
f.setSize(f.getToolkit().getScreenSize()); //注意此时仍能拖动窗口,与最大化的状态(不能拖动)不一样

背景和前景色:
所有的Swing组件(除了JFrame,JWindow,JDialog,JApplet-它们都不是轻量级组件)都有一个isOpaque方法用于返回它们是否是透明的,以及另一个setOpaque方法用于改变该属性的值.
JTextField tf=new JTextField("text");
tf.setForeground(Color.white);
tf.setBackground(Color.blue);

字体:
public synchronized void setFont(Font f);
public Font getFont();
其中的Font为
public Font(String name,int style, int size);

style有Font.PLAIN, Font.BOLD, Font.ITALIC等
如:
JButton b=new JButton("Italic,14-point, Serif");
b.setFont(new Font("SansSerif", Font.ITALIC, 14));

可见性:
public boolean isVisible();
public void setVisible(boolean state);
另外还有一个方法public boolean isShowing();指出该组件是否在屏幕上是实际可见的,如果组件自身和其所有父容器都是可见的,那么该函数就返回true.
注意在组件创建时,可见性属性初始化为true,除了顶层容器JFrame, JWindow和JDialog,它们最初都是不可见的.

启用或无效状态:
setEnabled(true)
setEnabled(false)

容器和布局管理器
容器
容器添加组件的常用方法:
public Component add(Component comp);
public Component add(Component comp, int index);
删除组件的方法:
public void remove(int index);
public void remove(Component comp);
public void removeAll();

pack()方法自动调整窗口首选大小和布局,去适应该窗口的容器组建。如果这个窗口和它的容器之前没有显示出来的话,在计算首选大小之前,先显示出它们。那样的话,在首选大小被计算出来之后,就能正确显示了

标签:
public JLabel();
public JLabel(String text);
public JLabel(String text, int horizontalAlignment);
垂直方向可以用setVerticalAlignment()设置
参数有SwingConstants.TOP, SwingConstants.CENTER,SwingConstants.BOTTOM
水平方向用setHorizontalAlignment()设置
参数有SwingConstants.LEFT, SwingConstants.CENTER,SwingConstants.RIGHT
JLabel默认是透明的,故与所在容器的背景色相同,且使用setBackground改变其背景色并不具有可见的效果.但可使用setOpaque方法使其不透明再设置背景色.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值