JFrame是一个顶层的框架类,好比一个窗户的框子。也是一个容器类。这个框子可以嵌入几个玻璃窗。
JPanel是一个容器类,相当于一大玻璃窗。
JLabel等是一些基础组件,它必须置于某个容器里,类似于窗花、剪纸,必须置于窗户的表面。
JFrame自带了一个玻璃窗。可以通过语句 Container c=getContentPane(); 获得该内容窗格。
也可以定制一个新的玻璃面板替换原来的自带的玻璃窗,代码如下:
JPanel jp=new JPanel();
this.setContentPane(jp);
JFrame
java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
Swing 的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。
JFrame()
构造一个初始时不可见的新窗体。
|
JFrame(GraphicsConfiguration gc)
以屏幕设备的指定 GraphicsConfiguration 和空白标题创建一个 Frame。
|
JFrame(String title)
创建一个新的、初始不可见的、具有指定标题的 Frame。
|
JFrame(String title, GraphicsConfiguration gc)
创建一个具有指定标题和指定屏幕设备的 GraphicsConfiguration 的 JFrame。
|
protected void
|
addImpl( Component comp, Object constraints, int index)
添加指定的子 Component。
|
protected JRootPane
|
createRootPane()
由构造方法调用,以创建默认的 rootPane。
|
protected void
|
frameInit()
由构造方法调用,以适当地初始化 JFrame。
|
AccessibleContext
|
getAccessibleContext()
获得与此 JFrame 关联的 AccessibleContext。
|
Container
|
getContentPane()
返回此窗体的 contentPane 对象
|
int
|
getDefaultCloseOperation()
返回用户在此窗体上发起 "close" 时执行的操作。
|
Component
|
getGlassPane()
返回此窗体的 glassPane 对象。
|
Graphics
|
getGraphics()
为组件创建一个图形上下文。
|
JMenuBar
|
getJMenuBar()
返回此窗体上设置的菜单栏。
|
JLayeredPane
|
getLayeredPane()
返回此窗体的 layeredPane 对象。
|
JRootPane
|
getRootPane()
返回此窗体的 rootPane 对象。
|
TransferHandler
|
getTransferHandler()
获取 transferHandler 属性。
|
static boolean
|
isDefaultLookAndFeelDecorated()
如果新创建的 JFrame 应该由当前外观为其提供 Window 装饰,则返回 true。
|
protected boolean
|
isRootPaneCheckingEnabled()
返回是否将对 add 和 setLayout 的调用转发到 contentPane。
|
protected String
|
paramString()
返回此 JFrame 的字符串表示形式。
|
protected void
|
processWindowEvent(WindowEvent e)
处理此组件上发生的窗口事件。
|
void
|
remove( Component comp)
从该容器中移除指定组件。
|
void
|
repaint(long time, int x, int y, int width, int height)
在 time 毫秒内重绘此组件的指定矩形区域。
|
void
|
setContentPane( Container contentPane)
设置 contentPane 属性。
|
void
|
setDefaultCloseOperation(int operation)
设置用户在此窗体上发起 "close" 时默认执行的操作。
|
static void
|
setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated)
提供一个关于新创建的 JFrame 是否应该具有当前外观为其提供的 Window 装饰(如边框、关闭窗口的小部件、标题等等)的提示。
|
void
|
setGlassPane( Component glassPane)
设置 glassPane 属性。
|
void
|
setIconImage( Image image)
设置要作为此窗口图标显示的图像。
|
void
|
setJMenuBar(JMenuBar menubar)
设置此窗体的菜单栏。
|
void
|
setLayeredPane(JLayeredPane layeredPane)
设置 layeredPane 属性。
|
void
|
setLayout(LayoutManager manager)
设置 LayoutManager。
|
protected void
|
setRootPane(JRootPane root)
设置 rootPane 属性。
|
protected void
|
setRootPaneCheckingEnabled(boolean enabled)
设置是否将对 add 和 setLayout 的调用转发到 contentPane。
|
void
|
setTransferHandler(TransferHandler newHandler)
设置 transferHandler 属性,该属性是支持向此组件传输数据的机制。
|
void
|
update( Graphics g)
只是调用 paint(g)。
|
JPanel
用途
组件是构成应用程序界面的基本元素,按钮、文本框、进度条等,都是组件。可视化组件又可以分为容器组件和非容器组件,可以在JPanel中放置按钮、文本框等非容器组件,甚至可。以在JPanel中再放置若干个JPanel组件,顶层容器也是容器组件,每一个窗口应用程序中有且只能有一个顶层容器组件。
构造方法
创建
JPanel myPanel = new JPanel();
构造方法
JPanel() 创建具有双缓冲和流布局的新Jpanel
JPanel(Boolean isDoubleBuffered) 创建具有FlowLayout和指定缓冲策略的新Jpanel
JPanel(LayoutManager layout) 创建具有指定布局管理器的新缓冲Jpanel
JPanel(LayoutManager layout, boolean isDoubleBuffered) 创建具有指定布局管理器和缓冲策略的新Jpanel
常用方法
略
注意点
略
使用示例
(下列程序来自网上示例程序,JPanel是可以嵌入在JFrame中的)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Test extends JFrame
{
JPanel contPanel = new JPanel();
JPanel pane1 = new JPanel();
JPanel pane2 = new JPanel();
JButton next = new JButton("下一个");
JButton pre = new JButton("上一个");
public Test()
{
setBounds(0,0,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contPanel.add(pane1);
pane1.add(next);
pane2.add(pre);
next.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
contPanel.remove(pane1);
contPanel.add(pane2);
contPanel.revalidate();
contPanel.repaint();
}
});
pre.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
contPanel.remove(pane2);
contPanel.add(pane1);
contPanel.revalidate();
contPanel.repaint();
}
});
setContentPane(contPanel);
setVisible(true);
}
public static void main(String [] args)
{
new Test();
}
}
/**
* 功能:gui界面开发演示
*/
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Swing_1 extends JFrame{
//定义按钮组件
JButton jb1 = null;
public static void main(String[] args) {
Swing_1 swing = new Swing_1();
}
//构造函数
public Swing_1(){
//JFrame是一个顶层容器
jb1 = new JButton("我是按钮");
//设置窗体的标题
this.setTitle("MyFirstSwing");
//设置大小,按像素
this.setSize(200,200);
//添加JButton组建
this.add(jb1);
//设置窗体位置
this.setLocation(400, 200);
//设置当关闭窗口时,保证jvm也退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见性
this.setVisible(true);
}
}
/*
* 边界布局管理器
* BorderLayout演示
* 1.继承JFrame
* 2.定义你需要的各个组建
* 3.创建组件
* 4.添加组建
* 5.对窗体设这
* 6.显示窗体
*/
package com.test1;
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.*;
public class Border extends JFrame{
JButton jb1,jb2,jb3,jb4,jb5;
public static void main(String[] args) {
Border border = new Border();
}
//构造函数
public Border(){
//创建组件
jb1 = new JButton("中");
jb2 = new JButton("北");
jb3 = new JButton("东");
jb4 = new JButton("南");
jb5 = new JButton("西");
//添加各个组件
//this.add(jb1)没有指定位置的话,会被覆盖
this.add(jb1, BorderLayout.CENTER);
this.add(jb2, BorderLayout.NORTH);
this.add(jb3, BorderLayout.EAST);
this.add(jb4, BorderLayout.SOUTH);
this.add(jb5, BorderLayout.WEST);
//设置窗体属性
this.setTitle("边界布局");
this.setSize(300,200);
this.setLocation(400,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
/**
* 功能:流式布局案例
*/
package com.test1;
import javax.swing.*;
import java.awt.*;
public class Flow extends JFrame{
//定义需要的组件
JButton jb1,jb2,jb3,jb4,jb5,jb6;
public static void main(String[] args) {
Flow flow = new Flow();
}
//构造函数
public Flow(){
//创建组件
jb1=new JButton("关羽");
jb2=new JButton("张飞");
jb3=new JButton("赵云");
jb4=new JButton("马超");
jb5=new JButton("黄忠");
jb6=new JButton("魏延");
//添加组件
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
this.add(jb6);
//设置布局管理器
this.setLayout(new FlowLayout(FlowLayout.LEFT));
//this.setLayout(new FlowLayout(FlowLayout.TRAILING));
//this.setLayout(new FlowLayout(FlowLayout.RIGHT) );
//this.setLayout(new FlowLayout(FlowLayout.CENTER));
//this.setLayout(new FlowLayout(FlowLayout.L));
//设置窗体属性
this.setTitle("边界布局");
this.setSize(300,200);
this.setLocation(400,200);
//禁止用户改变窗体大小
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示
this.setVisible(true);
}
}
/**
* 功能:网格布局
*/
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Grid extends JFrame{
//定义组件
int size = 9 ;
JButton jbs[] = new JButton[size];
public static void main(String[] args) {
//创建实例
Grid grid = new Grid();
}
public Grid(){
//创建组件
for(int i = 0 ; i<9 ; i++){
jbs[i] = new JButton (String.valueOf(i));
}
//设置网格布局(3,3)表示3行3列
this.setLayout(new GridLayout(3,3,10,10));
//添加组件
for(int i = 0 ; i < 9 ; i++){
this.add(jbs[i]);
}
//设置窗体属性
this.setTitle("网格布局");
this.setSize(300,200);
this.setLocation(400,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
}
}