Java 基于Swing的简单图形用户界面设计

JComponent类的部分子类以及JFrame类和JDialog类java

1.容器类(Container)和组件类(Component)编辑器

Java把由Component类的子类或间接子类建立的对象称为一个组件;把由Container的子类或间接子类建立的对象称为一个容器。布局

  • 能够向容器添加组件。Container类提供了一个public方法add(),一个容器能够调用这个方法将组件添加到该容器中。
  • 调用removeAll()方法能够移掉容器中的所有组件,调用remove(Component c)方法能够移掉容器中参数指定的组件。
  • 每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。

容器自己也是一个组件,所以能够把一个容器添加到另外一个容器中实现容器的嵌套。spa

java.swing包中有4个最重要的类JApplet,JFrame,JDialog和JComponent。设计

 

 

 

2.JFrame窗体3d

avax.swing包中的JFrame类是java.awt包中Frame类的子类,所以JFrame类其子类建立的对象是窗体。    对象

当应用程序须要一个窗口时,可以使用JFrame或其子类建立一个对象。窗口默认地被系统添加到显示器屏幕上,所以不容许将一个窗口添加到另外一个容器中。Frame类经常使用方法以下:blog

  • JFrame()  建立一个无标题的窗口。
  • JFrame(String s)  建立一个标题为s的窗口。
  • public void setBounds(int a,int b,int width,int height)设置出如今屏幕上时的初始位置为(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。
  • public void setSize(int width,int height) 设置窗口的大小,在屏幕出现默认位置是(0,0)。
  • public void setVisible(boolean b)  设置窗口是可见仍是不可见,窗口默认是不可见的。
  • public void setResizable(boolean b) 设置窗口是否可调整大小,窗口默认是可调整大小的。
  • public void setDefaultCloseOperation(int operation) 该方法用来设置单击窗体右上角的关闭图标后,程序会作出怎样的处理。其中的参数operation取下列有效值: 1) DO_NOTHING_ON_CLOSE 什么也不作 2)HIDE_ON_CLOSE 隐藏当前窗口 3)DISPOSE_ON_CLOSE 隐藏当前窗口,并释放窗体占有的其余资源 4)EXIT_ON_CLOSE 结束窗体所在的应用程序    这4个常量都是JFrame类中的static常量,单击关闭图标后,程序根据operation取值作出不一样的处理。

3.菜单组件索引

菜单放在菜单条里,菜单项放在菜单里。资源

1):JMenuBar菜单条

JComponent类的子类JMenuBar是负责建立菜单条的,即JMenuBar的一个实例就是一个菜单条。  

JFrame类有一个将菜单条放置到窗口中的方法:  

public void setJMenuBar(JMenuBar menubar);    

该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)

2):JMenu菜单

JComponent类的子类JMenu类是负责建立菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有如下几种:

JMenu(String s) 创建一个指定标题菜单,标题由参数s肯定 

public void add(MenuItem item) 向菜单增长由参数item指定的菜单选项对象。 

public void add(String s) 向菜单增长指定的选项。

public JMenuItem getItem(int n) 获得指定索引处的菜单选项。

public int getItemCount() 获得菜单选项数目。

3):JMenu菜单

JComponent类的子类JMenu类是负责建立菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有如下几种: 

JMenu(String s) 创建一个指定标题菜单,标题由参数s肯定

public void add(MenuItem item) 向菜单增长由参数item指定的菜单选项对象。

public void add(String s) 向菜单增长指定的选项。 

public JMenuItem getItem(int n) 获得指定索引处的菜单选项。 

public int getItemCount() 获得菜单选项数目。

4):JMenuItem菜单项

JMenuItem是Menu的父类,该类是负责建立菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。JMenuItem类的主要方法有如下几种:

  • JMenuItem(String s)  构造有标题的菜单项。
  • JMenuItem(String text, Icon icon) 构造有标题和图标的菜单项 
  • public void setEnabled(boolean b)设置当前菜单项是否可被选择。 
  • public String getLabel() 获得菜单项的名字。 
  • public void setAccelerator(KeyStroke keyStroke) 为菜单项设置快捷键。

5):嵌入子菜单

JMenu是JMenuItem的子类,所以菜单项自己还能够是一个菜单,这样的菜单项称为子菜单。

为了使得菜单项有一个图标,能够用图标类Icon声明一个图标,而后使其子类ImageIcon建立一个图标,如:

Icon icon=new ImageIcon(“”);

 

 

 

4.布局设计

java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。

容器可使用

setLayout(布局对象);

来设置本身的布局。

对于JFrame窗口,默认布局是BorderLayout布局。

1):FlowLayout布局

构造方法:FlowLayout();能够建立一个居中对齐的布局对象,如:

FlowLayout flow=new FlowLayout();

con.setLayout(flow);容器con使用flow这个布局对象

FlowLayout布局对象调用setAlignment(int aligin)方法能够从新设置布局的对齐方式,其中align能够取值FlowLayout.LEFT、FlowLayout.CENTER或FlowLayout.RIGHT。

FlowLayout布局对象调用setHgap(int hgap)方法和setVgap(int vgap)方法能够从新设置布局的水平间隙和垂直间隙。

如须要改变最佳大小,组件需调用:

public void setPreferredSize(Dimension preferredSize)

设置大小。例如:button.setPreferredSize(new Dimension(20,20));

注:对于添加到使用FlowLayout布局的容器中的组件,组建调用setSize(int x,int y)设置的大小无效。

2):BorderLayout布局是Window容器的默认布局。

JFrame、JDialog都是Window类的间接子类,它们的内容面板的默认布局都是BorderLayout布局。

若是一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。

例如:

一个使用BorderLayout布局的容器con,可使用add()方法将一个组件b添加到中心区域:

con.add(b,BorderLayout.CENTER);或con.add(BorderLayout.CENTER,b);

注:添加到某个区域的组件将占据整个这个区域,这个区域只能放置一个组件,若是向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换。

注:使用BorderLayout布局的容器最多能添加5个组件,若是容器中须要添加的组件超过5个,就必须使用容器的嵌套或改用其余布局策略。

3):CardLayout布局

    使用CardLayoutu容器能够容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张同样,这个被显示的组件将占据全部的容器空间。

   JtabbedPane窗格的默认布局是CardLayout布局,而且自带一些选项卡,这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,单机该选项卡,JTabbedPane窗格将显示对应的组件,选项卡窗格自带的选项卡默认的在该选项卡窗格的顶部,从左向右一次排列,选项卡的顺序和所对应的组件的顺序相同。 

JTabbedPane窗格可使用add(String text,Component c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。    

使用JTabbedPane窗格的构造方法      

public JTabbedPane(int tabPlacement)建立的选项卡窗格的选项卡的位置由参数tabPlacement指定,该参数的有效值为JTabbedPane.TOP、JTtabbedPane.BOTTOM、JTabbedPane.LEFT 和JTabbedPane.RIGHT。

4):GridLayout布局

GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分红若干行若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,并且组件定位也比较精确,使用GridLayout布局编辑器的通常步骤以下:

(1)使用GridLayout的构造方法GridLayout(int m,int n)建立布局对象,指定划分网格的行数m和列数n,如  GridLayout grid=new GridLayout(10,8);

(2)使用GridLayout布局的容器调用方法add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个…第一行最后一个、第二行第一个…最后一行第一个…最后一行最后一个。    

使用GridLayout布局的容器最多可添加m×n个组件。GridLayout布局中每一个网格都是相同大小,而且强制组件与网格的大小相同。    

因为GridLayout布局中每一个网格都是相同大小而且强制组件与网格的大小相同,使得容器中的每一个组件也都是相同的大小,显得很不天然。为了克服这个缺点,可使用容器嵌套。例如,一个容器使用GridLayout布局,将容器分为三行一列的网格,那么能够把另外一个容器添加到某个网格中,而添加的这个容器又能够设置为GridLayout布局、FlowLayout布局、CarderLayout布局或BorderLayout布局等。利用这种嵌套方法,能够设计出符合必定须要的布局。

5):BoxLayout布局

用BoxLayout类能够建立一个布局对象,称为盒式布局。BoxLayout在java.swing.border包中。java swing包提供了Box类,该类也是Container类的一个子类,建立的容器称为一个盒式容器。盒式容器的默认布局是盒式布局,并且不容许更改盒式容器的布局。所以,在策划程序的布局时,能够利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。      

BoxLayou的构造方法BoxLayout(Container con,int axis)能够建立一个盒式布局对象,并指定容器con使用该布局对象,参数axis的有效值是BoxLayout.X_AXIS和BoxLayout.Y_AXIS。      

Box类的类(静态)方法createHorizontalBox()能够得到一个具备行型盒式布局的盒式容器;Box类的类(静态)方法createVerticalBox()能够得到一个具备列型盒式布局的盒式容器。      

控制盒式布局容器中组件之间的距离,须要使用水平支撑或垂直支撑。    

Box类调用静态方法createHorizontalStrut(int width)能够获得一个不可见的水平Struct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。    

Box类调用静态方法createVertialStrut(int height)能够获得一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。

相关文章
相关标签/搜索