本篇文章主要介绍JFrame、JPanel、JScorllPane三个容器!!!
1.JFrame–顶层容器
屏幕上显示的所有的组件都必须包含在某个容器中,而有些容器是可以嵌套的,在这个嵌套层次的最外层必须是一个顶层容器。Swing中共提供了4中顶层容器,分别是JFrame、JApplet、JDialog、JWindow。JFrame是一个 带有标题行和控制按钮的独立窗口,是带边框的,创建应用程序时需要使用JFrame。创建小应用程序时使用JApplet,它被包含在浏览器窗口中。创建对话框时使用JDialog。JWindow是一个不带有标题行和控制按钮的窗口,通常很少使用。这里主要介绍JFrame。
JFrame是Java application程序的GUI容器,JFrame
作为顶层容器,不能被其他容器包含,但可以被其他的容器创建并弹出作为独立的容器。
JFrame继承自java.awt.Frame类,JFrame的继承关系如下图:
JFrame类常用的构造方法有以下两种
JFrame(); //不带参数的构造方法,该方法用于创建一个初始不可见的新窗体
JFrame(String title); //带一个字符串参数的构造方法,该方法用于创建一个初始不可见的新窗体,
//且窗口的标题由字符长参数指定
JFrame常用方法列表:
protected void frameInit(); //在构造方法中调用该方法来初始化窗体
public Component add(Component comp); //该方法从Container类中继承而来,用于向窗口中添加组件
public void setLocation(int x,int y); //该方法从Component 类中继承而来,用于设置窗口的位置坐标(以像素为单位)
public void setSize(int width,int height); //该方法Window类中继承而来,用于设置窗口的大小(以像素为单位)
public void setVisible(boolean b); //从window类中继承而来,用于设置窗口是否可视
public void setComponent(Container contentPane); //设置容器的面板容器
public void setIconImage(Image image); //设置窗体左上角的图标
public void setJMenuBar(JMenuBar menubar); //设置窗体的菜单栏
public void setDefaultCloseOperation(int operation); //设置用户对此窗体的默认关闭操作,
//该操作的参数是常量,必须是以下选项之一:
// - DO_NOTHING_ON_CLOSE---不执行任何操作
// - HIDE_ON_CLOSE---自动隐藏该窗体
// - DISPOSE_ON_CLOSE---自动隐藏并释放该窗体
// - EXIT_ON_CLOSE---退出应用程序
实例:
package awt;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import javax.swing.*;
public class myJframe extends JFrame{
private static final long serialVersionUID = 1L;
public myJframe(int width,int height,String title) {
super("JFrame");
this.setSize(width,height);
//设置窗口的位置
this.setLocation(400,400);
//设置窗体的默认退出关闭操作
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String args[]) throws IOException {
mainFrame = new myJframe(width,height,"JFrame");
}
}
在完成窗口的框架定义后,我们会得到一个JAVA的窗口,这个时候我们就相当于得到了一个窗户的架子,我们想在窗子上画画是不行的(毕竟不能再空气上画画嘛),这个时候我们就要在窗框(JFrame)上装个玻璃才能画画对吧。这个玻璃在java中就叫做窗格,也叫内容窗格。
对于所有的顶层容器都有一个内容窗格(ContentPanel),顶层容器中除菜单栏外所有的组件都放在内容窗格中。要想得到内容窗格有两种方法:
- 通过顶层容器的getContentPane()方法获得其默认的内容窗格,该方法返回一个java.awt.Container,仍然是一个容器,然后就可以将组建添加到内容窗格上
Container contentPane = frame.getContentPane();
contentPane.add(button,BorderLayout.CENTER);
- 通过创建一个新的内容窗格取代顶层容器的默认窗格。方法见JPanel。
2.JPanel—中间容器
首先谈谈什么叫中间容器?
中间容器与顶级容器不同,不能独立存在,必须放在其他容器中。
JPanel是无边框的,不能被移动、缩放或者关闭的容器。它支持双缓冲功能,在处理动画上较少发生画面的闪烁的情况。JPanel类继承自javax.swing.JComponent类。使用时,通常先将其他组将加入到JPanel中,然后再将JPanel加入到顶级容器中。
JPanel类的继承关系层次如图示:
JPanel的常用构造方法有以下两种:
JPanel(); //不带参数,构造一个默认为流布局(FlowLayout)的面板
JPanel(LayoutManger layout); //按照参数所指的布局方式构造一个面板
JPanel常用的方法:
public Component add(Component comp); //向面板中添加组件
public void setLayout(LayoutManger mgr); //设置面板的布局
实例:
package awt;
import awt.myJframe; //引用上个例子中创建的myJrame
import java.io.IOException;
import javax.swing.*;
public class myJpanel{
public myJpanel() {
JPanel p = new JPanel();
myJframe frame = new myJframe(400,300,"JPanel");
JButton bt_ok = new JButton("OK");
JButton bt_cancel = new JButton("cancel");
p.add(bt_ok);
p.add(bt_cancel);
frame.add(p);
frame.setVisible(true);
}
public static void main(String args[]) throws IOException, InterruptedException {
new myJpanel();
}
}
3.JScrollPane—中间容器
JScrollPane也是一个容器,称为滚动窗口。可以把一个组件放到滚动窗口中,通过滚动条查看组件。特殊的是,只能向滚动窗口中添加一个组件,故常将组建加入到一个容器中,再加入到滚动容器中。
JScorllPane类的继承关系如下图:
JScrollPane的构造方法有以下几种:
JScrollPane(); //创建一个空的滚动窗口,需要时水平和垂直滚动条都可显示
JScrollPane(int vsbPolicy,int hsbPolicy); //按照指定的滚动条策略创建一个空的滚动容器
JScrollPane(Component view); //创建一个显示指定组件内容的JScorllPane,需要时会显示滚动条
常用方法:
public void setHorizontalScrollBarPolicy(int policy); //确定水平滚动条何时显示,取值如下:
//JScorllPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED 在需要时显示,默认策略
//JScorllPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEVER 永不显示
//JScorllPaneConstants.HORIZONTAL_SCROLLBAR_AS_ALWAYS 一直显示
public void setVerticalScrollBarPolicy(int policy); //确定垂直滚动条何时显示,取值类似水平滚动条
public void setViewportView(Component view); //创建一个视口并设置其试图
例子如下:
package awt;
import awt.myJframe;
import javax.swing.*;
public class myJscorllpane{
public myJscorllpane() {
JScrollPane sp = new JScrollPane();
sp.setSize(100,50);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JPanel p = new JPanel();
myJframe frame = new myJframe(400,300,"JScrollPanel");
JButton bt_ok = new JButton("OK");
JButton bt_cancel = new JButton("cancel");
p.add(bt_ok);
p.add(bt_cancel);
sp.setViewportView(p);
frame.add(sp);
sp.setVisible(true);
frame.setVisible(true);
}
public static void main(String args[]) {
new myJscorllpane();
}
}