轻量级组件:Swing    重量级组件:AWT (abstract windows tookit)
GUI API包含的类可以分为三个组:组建类,容器类,辅助类。

组建类用来创建图形界面。容器类用来包含其它组件。辅助类如Graphics,color,font用来支持GUI组件。

JFrame,JApplet,JDialog和JComponet类及其子类放置在javax.swing包中,其余放在java.awt中。

框架:
import javax.swing.JFrame;

public class test
{
public static void main(String[] args)
{
JFrame frame = new JFrame("MyFrame");
frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

JFrame()                                               创建一个无标题的默认框架
JFrame(title : String)                              创建一个特定 标题的框架
setSize(width: int,height: int)                  设置框架的大小
setLocation(x: int, y: int)                         设置左上角的位置
setDefaultCloseOperation(mode: int)        指定框架关闭时的操作
setLocationRelativeTo(c: Component)       设置特定组件相关的框架位置,若值为null,那么框架屏幕居中
pack(): void                                            自动设置框架大小在框架中放置组建


调用frame.setVisable(true)后才会显示框架。如果没有setSize方法,那么框架大小只能显示标题栏。setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)在关闭应用程序框架后结束程序。

可以使用add方法添加组件
JButton jbtok = new JButton("OK");
frame.add(jbtok);

frame.setSize(400,300);
frame.setDefalutCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelatioveTo(null);
frame.setVisible(true);

布局管理器 LayoutManager:

java的GUI组建都放置在容器中,它们的位置是由容器的布局管理器来管理

使用setLayout(aLayoutManager)方法在容器中设置布局管理器。创建一个XLayout实例,并置于一个容器中
     LayoutManager layoutManager = new XLayout();
     container.setLayout(layoutManager);
三种基本布局管理器:FlowLayout,GridLayout,BorderLayout

FlowLayout:
     FlowLayout是最简单的布局管理器。按照顺序从左到右将组件排列到容器中,排满一行时开始新的一行。可以使用三个常量FlowLayout.RIGHT,FlowLayout.CENTER,FlowLayout.LEFT来指定组件的对齐方式。

FlowLayout() :                                              创建一个默认的FlowLayout管理器
FlowLayout(alignment: int)                             创建一个带对齐方式的FlowLayout管理器
FlowLayout(alignment: int,hgap: int,vgap: int)  创建一个带指定对齐方式,水平间隔和垂直间隔的FlowLayout管理器

import  javax.swing.JLabel;
import  javax.swing.JTextField;
import  javax.swing.JFrame;
import  java.awt.FlowLayout;

public  class  ShowFlowLayout  extends  JFrame
{
         public  ShowFlowLayout()
       {
              setLayout(  new  FlowLayout(FlowLayout. LEFT ,10,20));
              
              add(  new  JLabel( "First Name"  ));
              add(  new  JTextField(8));
              add(  new  JLabel( "MI"  ));
              add(  new  JTextField(1));
              add(  new  JLabel( "Last Name"  ));
              add(  new  JTextField(8));
              
       }
       
         public  static  void  main(String[] args)
       {
              ShowFlowLayout frame =  new  ShowFlowLayout();
              
              frame.setTitle(  "ShowFlowLayout" );
              frame.setSize(200,200);
              frame.setLocationRelativeTo(  null );
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setVisible(  true );
       }

}


使用的时候从JFrame派生出一个布局管理器类进行布局管理,然后设置各种参数

大多数GUI主类都将扩展JFrame类。
匿名Layout对象
setLayout(new FlowLayout(FlowLayout.LEFT),100,200);
等价于
FlowLayout layout = new FlowLayout(FlowLayout.LEFT,10,20);
setLayout(layout);


GridLayout:


     GridLayout管理器以网格的形式管理组件。从左到右,从上到下逐层添加。

GridLayout()                                                    创建一个默认的GridLayout管理器
GridLayout(rows: int, columns: int)                    创建一个指定行数和列数的管理器
GridLayout(rows: int,columns: int,hgap: int,vgap: int)
                                                         创建一个指定行数列数水平间隔垂直间隔的管理器

import  javax.swing.JLabel;
import  javax.swing.JTextField;
import  javax.swing.JFrame;
import  java.awt.GridLayout;

public  class  ShowGridLayout  extends  JFrame
{
         public  ShowGridLayout()
       {
              setLayout(  new  GridLayout(3,2,3,5));
              
              add(  new  JLabel( "First Name"  ));
              add(  new  JTextField(8));
              add(  new  JLabel( "MI"  ));
              add(  new  JTextField(1));
              add(  new  JLabel( "Last Name"  ));
              add(  new  JTextField(8));
       }
       
         public  static  void  main(String[] args)
       {
              ShowGridLayout frame =  new  ShowFlowLayout();
              frame.setTitle(  "ShowGridLayout" );
              frame.setSize(200,125);
              frame.setLocationRelativeTo(  null );
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setVisible(  true );
       }
}

如果改变这个框架的大小,按钮的布局保持不变

BorderLayout:
     BorderLayout管理器将容器分成5个区域:东区,南区,西区,北区和中央。使用add(Component,index)方法可以将组件添加到BorderLayout中,其中index是一个常量,取值为BorderLayout.EAST,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.NORTH,BorderLayout.CENTER.

BorderLayout()                                       创建一个默认的BorderLayout管理器
BorderLayout(hgap: int,vgap: int)             创建一个指定水平和垂直间隔的管理器

import  javax.swing.JButton;
import  javax.swing.JFrame;
import  java.awt.BorderLayout;

public  class  ShowBorderLayout  extends  JFrame
{
         public  ShowBorderLayout()
       {
              setLayout(  new  BorderLayout(5,10));
              
              add(  new  JButton( "East"  ),BorderLayout. EAST );
              add(  new  JButton( "South"  ),BorderLayout. SOUTH );
              add(  new  JButton( "West"  ),BorderLayout. WEST );
              add(  new  JButton( "North"  ),BorderLayout. NORTH );
              add(  new  JButton( "Center"  ),BorderLayout. CENTER );
       }
       
         public  static  void  main(String[] args)
       {
              ShowFlowLayout frame =  new  ShowFlowLayout();
              frame.setTitle(  "ShowBorderLayout" );
              frame.setSize(200,125);
              frame.setLocationRelativeTo(  null );
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setVisible(  true );

       }
}

布局管理器的属性
     FlowLayout:
          alignment,hgap,vgap
          可以使用setAlignment,setHgap和setVgap方法来注明对齐方式,水平间隔和垂直间隔
     GridLayout:
          rows,columns,hgap,vgap表示行数列数,水平间隔和垂直间隔
          可以setRows,setColumns,setHgap和setVgap来注明行数列数水平间隔和垂直间隔
     BorderLayout:
          hgap,vgap
          可以用setHgap,setVgap来指定水平间隔和垂直间隔

     FlowLayout flowLayout = new FlowLayout();
     
     flowLayout.setAlignment(FlowLayout.RIGTH);
     flowLayout.setHgap(10);
     flowLayout.setVgap(20);

面板:
     可以将一个窗口分成几个面板。面板的作用就是放置用户界面组建的字容器。
     面板的swing版本是JPanel
     JPanel p =new JPanel();
     p.add(new JButton("OK"));
     面板可以放到一个框架中或者另一个面板中     
     f.add(p);

Color类:
     public color(int r,int g,int b);
     Color color = new Color(128,100,100);
     可以使用定义在java.awt.Component类中的setBackGround(Color c)和setForeground(Color c)方法来设置一个组件的背景色和前景色。
     JButton jbtOK = new JButton("OK");
     jbtOK.setBackground(color);
     jbtOK.setForeground(new Color(100,1,1));


Font类:
     public Font(String name,int style,int size);
     可以从SanSerif,Serif,Monospaced,Dialog或DialogInput中选择一种字体名,可以从Font.PLAIN(0),Font.BOLD(1),Font.ITALIC(2),Font.BOLD+Font.ITALIC(3)中选择正整数的字体大小。
Font font1 = new Font("SanSerif",Font.BOLD,16);
Font font2 = new Font("Serif",Font.BOLD+Font.ITALIC,12);

JButton jbtOK = new JButton("OK");
jbtOK.setFont(font1);



toop tip: 
     xxx.setToolTipText("xxxxxxxxxxx");
设置组件的边界
     xxx.setBorder(new TitleBorder("xxxxx"));

图像图标:
     java中可以支持三种图片,GIF,JPEG,PNG。分别以.gif,.jpg,.png。
     为了显示一个图像图标,首先使用new java.swing.ImageIcon(filename)来创建一个ImageIcon对象
     ImageIcon icon = new ImageIcon("image/us.gif");
     
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐