java 界面编程(上)

一、AWT介绍

  1)AWT(Abstract windows toolkit) 包括了很多类和接口,用于java Application的GUI(Graphics User Interface图形界面编程)

  2)GUI的各种元素(窗口,按钮,文本框)等都由java类来实现

  3)使用AWT所涉及的类一般在java.awt包及其子包中。

  4)Container和Component是AWT中的两个核心类。

  所有的可以显示出来的图形元素都被称为Componnet,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其他Component元素的一种容器,Container本身也是一种Component,Container里面也可以容纳别的Container。

  Container里面又分为Window 和Pannel,Window是可以独立显示出来的,平时我们看到的各种各样的应用程序的窗口都可以成为Window,Window作为一个应用程序窗口独立显示出来,Pannel也可以容纳其他的图形元素,但一般看不见Pannel,Pannel不能作为应用程序的独立窗口显示出来,Pannel要想显示出来就必须得把自己装入window中才能显示出来。

  Panne应用比较典型地就是Applet(java的页面小应用程序),现在基本已经不用了Ajax和AVASCRIPT完全取代了它的应用。

  Window本身又可以分为Frame和Dialog,Frame就是我们平时看到的一般的窗口,而Dialog则是那些需要用户进行某些操作(如点击某个下拉菜单的项)才出现的对话框,这种对话框就是Dialog 。

二、组件和容器

  java的图形界面的基本组成部分是Component,Component类及其子类的对象用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如,button, lable。

  一般的Component对象不能独立地显示出来,必须将“放在”某一的Container对象中,才可以显示出来。

  Container是Component子类,Container子类对象可以“容纳” 别的Component对象。

  Container对象可以使用方法add()向其中添加其他的Component对象。

  Container是Component的子类,因此Container对象也可以被当做Component对象添加到其他Container对象中。

  有两种常用的Container:

    window: 其对象表示自由停泊的顶级窗口

    Pannel:  其对象可作为容纳其他的Component对象,但不能独立存在,必须被添加到其他Container中(如window或Applet)

Frame

  Frame是windows的子类,由Frame或其子类创建的对象是一个窗体。

  Frame的常用构造方法:

  Frame()

  Frame(String s) 创建标题栏为s的窗口  (静态的窗口而非某个动作pop出来的窗口  做为对比)

  方法

  SetBounds(int x,inty,int width,int height);

  SetSize(int width,int height);

  SetLocation(int x,int y);

  SetBackground(Color c)

  SetVisible(boolean b)

  SetTitle(String name)

  String getTitle()

  setResizeable(boolean b)

  

package com.lost.frame;

import java.awt.Color;
import java.awt.Frame;

public class FrameDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Frame f1 = new MyFrame(100,100,400,400,Color.BLUE);
		Frame f2 = new MyFrame(300,100,400,400,Color.YELLOW);
		Frame f3 = new MyFrame(100,300,400,400,Color.GREEN);
		Frame f4 = new MyFrame(300,300,400,400,Color.MAGENTA);
	}

}

class MyFrame extends Frame
{
	static int  id = 0;
	public MyFrame(int x,int y,int width,int height,Color color) {
		// TODO Auto-generated constructor stub
		super("MyFrame"+(++id));
		setBackground(color);
		setBounds(x, y, width, height);
		setLayout(null);
		setVisible(true);
	}

}

  Pannel

    Pannel 对象可以看成容纳Componnet的空间

    Pannel 对象可以拥有自己的布局管理器

    Pannel 类拥有从其父类继承来的

        SetBounds(int x,int y,int width,int height)

        setSize(int width, int height)

        setLocation(int x, int y)

        setBackground(Color c)

        setLayout(Layoutmanager mgr)

    构造方法

        Pannel()

        Pannel(LayoutManager layout)

package com.lost.pannel;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;

import javax.lang.model.type.NullType;

public class PannelDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f = new Frame("Java Frame with Pannel");
		Panel p = new Panel();
		f.setLayout(null);
		f.setBounds(300, 300, 500, 500);
	    f.setBackground(new Color(0,0,102));//设置背景颜色时使用三基色(红,绿,蓝)的比例来调配背景色
	    p.setBounds(50,50,400,400);//这里设置的坐标(50,50)是相对于Frame窗体的
	    p.setBackground(new Color(204,204,255));
	    f.add(p);//把Panel容器装入到Frame容器中,使其能在Frame窗口中显示出来
	    f.setVisible(true);
	}

}

  三、布局管理器

    管理Component在Container中的布局,不必直接设置Component的的位置和大小

    每个Container都有一个布局管理对象,弹光荣器需要对讴歌组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setlayout方法改变其布局管理器对象。

Awt提供了5种布局管理器类:

  Flowlayout

  Borderlayout

  GridLayout  

  Cardlayout

  GridBagLayout

1、第一种布局管理器--------FlowLayout  

  FlowLayout是Pannel类的默认布局管理器

    flowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。

    不改变组件的大小,按组件原有尺寸显示组件,可以设置不同的组件间距,行距以及对其方式。

  FlowLayout布局管理器默认的对其方式是剧中。

  FlowLayout构造方法

    new Flowlayout(Flowlayout.RIGHT,20,40)

      右对齐,组件之间的水平间距20px,垂直间距40px

    new FlowLayout(FlowLayout.LEFT)

      左对齐,水平和垂直间距为缺省值5px

    new FlowLayout()

       默认的居中对齐方式,水平和垂直间距为缺省值5.

package com.lost.FlowLayout;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class FlowLayoutDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f  = new Frame("FlowLayout");

		Button btn1 = new Button("btn1");
		Button btn2 = new Button("btn2");
		Button btn3 = new Button("btn3");

		f.setLayout(new FlowLayout());
		f.add(btn1);
		f.add(btn2);
		f.add(btn3);
		f.setVisible(true);

		f.setSize(500, 500);

	}

}

  

2、Borderlayout

  Borderlayout 是Frame类的默认布局管理器

  BoderLayout将整个容器分为

  东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)

  组件只能被添加到指定的区域。

  如不指定组件的加入部位,则默认加入到CENTER区

  每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖

Borderlayout布局容器尺寸缩放原则

   水平和垂直缩放

package com.lost.Border;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class BorderLayoutDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f = new Frame("BorderLayout");
		Button btn1 = new Button("east");
		Button btn2 = new Button("west");
		Button btn3 = new Button("north");
		Button btn4 = new Button("south");
		Button btn5 = new Button("center");

		f.setLayout(new BorderLayout());

		f.add(btn1,BorderLayout.EAST);
		f.add(btn2,BorderLayout.WEST);
		f.add(btn3,BorderLayout.NORTH);
		f.add(btn4,BorderLayout.SOUTH);
		f.add(btn5,BorderLayout.CENTER);

		f.setVisible(true);
		f.setSize(500, 500);
	}

}

  3、GridLayout(表格布局管理器)

  Gridlayout布局管理器

  GridLayout型布局管理器将空间划分成规则的矩形网络,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右填满一行后,再从上到下。

  在GridLayout构造方法中指定分割的行数和列数

  new GridLayout(3,4)

package com.lost.Grid;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class GridLayoutDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f = new Frame("GridLayout");
		f.setLayout(new GridLayout(2,3));
		 Button btn1 = new Button("btn1");
		 Button btn2 = new Button("btn2");
		 Button btn3 = new Button("btn3");
		 Button btn4 = new Button("btn4");
		 Button btn5 = new Button("btn5");
		 Button btn6 = new Button("bnt6");

		 f.add(btn1);
		 f.add(btn2);
		 f.add(btn3);
		 f.add(btn4);
		 f.add(btn5);
		 f.add(btn6);
		 /*
		  * Causes this Window to be sized to fit the preferred size and layouts of its subcomponents.
		  *  The resulting width and height of the window are automatically enlarged if either of dimensions
		  *   is less than the minimum size as specified by the previous call to the setMinimumSize method.
		     If the window and/or its owner are not displayable yet, both of them are made displayable before
		    calculating the preferred size. The Window is validated after its size is being calculated.
    	 	设置到适应尺寸
    	  * */
		 f.pack();

		 f.setVisible(true);

	}

}

  Frame的嵌套使用小实例

  

package com.lost.layout;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;

public class LayoutCombineDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f  = new Frame("Layout 嵌套使用");
		f.setLayout(new GridLayout(2, 1));
		f.setVisible(true);
		f.setLocation(300, 400);
		f.setSize(500, 500);
		f.setBackground(new Color(204,204,255));

		Panel p1 = new Panel(new BorderLayout());
		Panel p2 = new Panel(new GridLayout(2,1));
		Panel p3 = new Panel(new BorderLayout());
		Panel p4 = new Panel(new GridLayout(2,2));

		p1.add(new Button("East(p1-东)"),BorderLayout.EAST);
		p1.add(new Button("West(p1-西)"),BorderLayout.WEST);
		p2.add(new Button("p2-Button1"));
		p2.add(new Button("p2-Button2"));
		p1.add(p2,BorderLayout.CENTER);//把p2作为元素加入到p1里面

		p3.add(new Button("East(p3-东)"),BorderLayout.EAST);
		p3.add(new Button("West(p3-西)"),BorderLayout.WEST);

		  for(int i=0;i<4;i++){
           p4.add(new Button("p4-Button"+i));
		  }
		  p3.add(p4,BorderLayout.CENTER);

		  f.add(p1);
		  f.add(p3);
	}

}

  

四、布局管理器小结

  Frame是一个顶级窗口,Frame的缺省布局管理器为Borderlayout

  Panel无法单独显示,必须添加到某个容器中。

    Panel的缺省布局管理器为Fowlayout

  当把Pannel作为一个组件添加到某个容器中后,该Panel任然可以有自己的布局管理器。

  使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的大小和位置属性,如果试图使用java语言提供的setLocation  setSize  setBounds ,都会被布局管理器覆盖。

  如果用户确实需要亲自设置组件大小或位置,则应该取消该容器的布局管理器

  setlayout(null);

时间: 2024-11-10 18:50:47

java 界面编程(上)的相关文章

java界面编程(1) ------ Swing基础

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 最近想学下java的界面编程,在此记录下.    大多数的Swing应用都被构建在基础的JFrame内部,JFrame在你作用的任何操作系统中都可以创建视窗应用. 看如下一个最简单的JFrame例子: JFrame frame = new JFrame("Hello Swing"); frame.setDefaultCloseOperation(JFrame.EXIT

Java界面编程-建立一个可以画出图形的简单框架

引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import javax.swing.*; 4 5 public class NotHelloWorldComponent extends JComponent { 6 public static final

java 界面编程中 JButton问题

在图形化界面编程中,按钮JButton使用时需要布置按钮的位置,更改按钮大小. 1)按钮初始化 JButton button = new JButton() /*在new JButton()括号中可以添加按钮显示的字符等 JButton button = new JButton("JButtonExample") 但是不能初始化按钮的大小和位置*/ 2)JButton按钮的在面板中位置的确定 对JButton大小的设置     ——因为JButton是属于小器件类型的,所以一般的set

java界面编程(3) ------ 控制布局

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在java 中,组件放置在窗体上的方式可能与其他的GUI系统都不相同.首先,它完全基于代码,没有用来控制组件布置的"资源".第二,组件旋转在窗体上的方式不是通过绝对坐标控制,而是由"布局管理器"根据组件加入的顺序决定位置.使用不同的布局管理器,组件的大小,形状和位置将大不相同,此外,布局管理器还可以适应applet或应用程序窗口的大小,所以如果窗口

java 界面编程

转载之u010345869的博客,这里学习下 /* * java复选框和单选按钮 */ import javax.swing.*; import java.awt.*; public class Test0 extends JFrame{ JList jlist; //列表框 JComboBox jcb; //下拉框 JPanel jp1, jp2; //面板 JLabel jlb1, jlb2; JScrollPane jsp; //滚动控件 //构造函数 public Test0(){ jp

Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程

转载:http://blog.csdn.net/sunyiz/article/details/8004573 关于 Java 的 GUI ,关于 Swing,其实有一件事情是非常重要的 那就是线程! 如何正确的使用 GUI 线程, 什么样的代码应该在 GUI 线程上执行? 什么样的代码应该用其他线程执行? 其实这些都很重要, 但是,很多关于 Java 的教材都没有强调过这些,甚至有的书完全就忽略了这一点 所以,我在这里要给所以开始接触 Swing 的人,讲述一个重要概念: Swing 中的线程

java界面编程(下)

一.事件监听 package com.lost.ActionEvent; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.Wind

java 界面编程用socket实现服务端与客户端的循环通信。

服务端: package 实验五聊天; import java.awt.BorderLayout; import java.awt.EventQueue; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.ne

java界面编程(5) ------ 按钮和按钮组

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 了解了布局管理器和Swing事件模型,那么剩下的就是Swing 的各个组件了,下面就开始逐个学习Swing的各个组件的用法及功能,本节先来看最常用的按钮和按钮组. 1. 按钮 Swing提供了许多类型的按钮,有普通的按钮,复选框,单选等按钮,甚至菜单项,所有的这些按钮都是从AbstractButton继承而来.如下图的继承关系: 可以看出,JButton,JMenuItem,J