JFrame:java图形化界面设计,是一个顶层的框架类,相当于容器。好比一个窗户的框子,这个框子可以嵌入几个玻璃窗。
JPanel:也是一个容器类,相当于一个大玻璃窗。
JLabel:是一些基础组件,它必须置于某个容器里,类似于剪纸,必须置于窗户的表面。
JFrame自带了一个玻璃窗。可以通过语句 Container c=getContentPane(); 获得该内容窗格。
也可以定制一个新的玻璃面板替换原来的自带的玻璃窗,
代码如下:
JPanel jp=new JPanel();
this.setContentPane(jp);
1. 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)。 |
2.JPanel
官方JavaDocsApi: javax.swing.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();
}
}
3.Jlabel
JLabel类中常用的方法
1.public JLabel(String text, Icon icon, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面文字为text图标为icon,水平对齐方式为horizontalAlignment,其值可为 SwingConstants.LEFT、SwingConstants.CENTER及SwingConstants.RIGHT。
2.public JLable(String text, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面文字为text,水平对齐方式为horizontalAlignment。
3.public JLabel(String text)
构造器。Label标记元件配置在显示区的中央部分,钮面文字为text,左边对齐。
4.public JLabel(Icon image, int horizontalAlignment)
构造器。Label标记元件配置在显示区的中央部位,钮面图标为icon,水平对齐方式为horizontalAlignment。
5.public JLabel(Icon image)
构造器。Label标记元件配置在显示区的中央部位,钮面图标为icon,左边对齐。
6.public JLabel() 构造器。Label标记元件配置在显示萄中央部位,左边对齐。
7.public Icon getIcon() 返回图标Icon对象。
8.public String getText() 返回钮面文字字符串。
9. public void setIcon(Icon icon) 设置图标Icon对象为icon。
10.public void setText(String text)
GUI界面开发演示
/*** 功能: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);}}