文章目录
- 一、常用组件与容器
- 1.1容器
- 2布局管理
- 1.1FlowLayout布局管理器
- 1.2BordeLayout布局管理器
- 1.3GridLayout布局管理器
一、常用组件与容器
图形用户界而是由组件和容器构成的。
组件又称控制组件。是图形用户界面不可再分的最小元素,其功能是与用户完成一次交互操作。Swing组件包括一些比较简单的组件,如标签、按钮、组合柜及列表等,也包括一些比较复杂的组件,如文本控件、菜单、表格、进度条、文件选择器等,它们都存放在javax.swing包中。
容器是若干个组件和容器的集合。容器中包含了许多界面元素,这些元素可以是组件,也可以是容器。容器实际是对图形界面中的界面元素的一种管理,其中顶层容器和中间容器是常用的两类形式。
显示在屏幕上的所有组件都必须包含在某个容器中,所以这里首先介绍容器的主要用途及使用方式,然后对一些较为常用的组件进行介绍。
1.1容器
每一个应用组件的应用程序都至少有一个顶层容器 ,应用程序必须创建一个顶层容器之后才能放置其他GUI容器或组件。
Swing提供了4种顶层容器。分别为JFrame、JApplet、JDialog和JWindow。其中,JFrame 和JDialog最为常用。
JFrame
JFreme是最常用的种顶层容器。 它的作用是创建一个顶层的 Windows窗体,它的外观就像平常Windows系统下见到的窗体,带有标题栏和控制按钮等。
JFrame类提供了下面两种格式的构造方法。
(1)JFrame():创建不指定标题的窗体。
(2)JFrame(String title): 创建指定标题的窗体。
JFrame类的其他常用方法有以下几个。
(1 void setDefaultCloseOperation(int op):设置关闭窗口时所做的操作.op可取的值包括HIDE_ON_CLOSE(关闭窗口时隐藏)、EXIT_ON_ CLOSE关闭窗口时退出应用程序,不可用于Applet)、DISPOSE_ON_CLOSE(关闭窗口时隐藏窗口并释放资源)、NOTH_ING_ON_CLOSE(关闭窗口时不做任何事情,通常配合监听器使用)。
(2) void setContentPane(Container contentPane);设置窗口的内容窗格。
(3)Container getContentPane():返回窗口的内容窗格。
(4)void seJMenuBar(JMenuBar menuBar);设置窗口的菜单栏。
(5)JMenuBar geJMenuBar();返回窗口的菜单栏。
(6)void setSize(int widh,int high);将窗口设置宽为wdth,高为hight。
每一个顶层容器都有一个内容窗格(ComemPmo),面层容器中除菜单之外的组件都放在这个内容商格中。可以调用顶层容器中的conmemPn方法得到当前容器的内容窗格,并使用add方法将组件添加到其中。
实例演示:
package com.hg.day27.demo01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class DialogDemo01 extends JDialog {
public DialogDemo01(JFrame jframe) {
super(jframe,false);
this.setBounds(100,100,500,500);
Container container = this.getContentPane();
container.setLayout(null);
// container.add(new Label("大数据五班"));
JButton button = new JButton("我是五班");
button.setBounds(30,30,200,50);
container.add(button);
}
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
Container container = j.getContentPane();
container.setLayout(null);
JButton button = new JButton("我要登录");
button.setBounds(30,30,200,50);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
DialogDemo01 s = new DialogDemo01(j);
s.setVisible(true);
System.out.println("我被点击了");
}
});
container.add(button);
}
}
运行结果:
前面介绍了Swing容器,以及将组件放入容器中的基本方法,当容器中包含多个组件时,组件的布局包括位置和大小)就显得t分重要。Java布局组件的基本策略是采用布局管理器。每个容器(如顶层容器的内容窗格)都有一个默认的布局管理器,开发者可以通过容器的setLayout()方法改变容器的布局管理器。
实例演示:
package com.hg.day27.demo02;
import javax.swing.*;
import java.awt.*;
//面板作为容器不能单独存在,必须放到其他容器里面JFrame,JDialog
public class JScrollDemo extends JFrame {
public JScrollDemo(){
Container container = this.getContentPane();
//文本域
JTextArea textarea =new JTextArea(20,50);
textarea.setText("大数据五班");
//scroll面板
JScrollPane scrollPane =new JScrollPane(textarea);
// JPanel scrollPane =new JPanel();
// scrollPane.add(textarea);
container.add(scrollPane);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.setBounds(100,100,500,500);
}
public static void main(String[] args) {
new JScrollDemo();
}
}
运行结果:
2布局管理
1.1FlowLayout布局管理器
FlowLayout定义在java. awt包中,是JPanel容器的默认布局管理器,它按照从上到下、从左到右(或从右向左)的规则将添加到容器中的组件依次排序,如果一行放满后就另起一行。另外,在创建FlowLayout的队形时可以指定一行中组件的对齐方式,默认为居中;还可以指定每个组件之间的水平和垂直方向的间距大小,默认值为5像素。这种布局管理器并不调整每个组件的大小,而是永远保持每个组件的最佳尺寸,剩余空间用空格补填。
在FlowLayout类中,提供了3种格式的构造方法。
(1)FlowLayout():无参数的构造方法,创建一个对齐 方式为居中、水平和垂直方向间距为5像素的布局管理器对象。
(2)FlowLayout(int align): 创建一个对齐方式为align 的布局管理器对象。align是在FlowLayout类中定义的常量LEFT(居左)、RIGHT(居右)、CENTER(
居中)、LEADING(沿容器左侧对齐)和TRAILING(沿容器右侧对齐)中的一个。
(3)FIowLayout (int align,int hgap,int vgap):创建一个对齐方式为align、水平间能为hgap像素、垂直间距为vgap像素的布局管理器对象。
演示如下:
package com.hg.day27.demo03;
import javax.swing.*;
import java.awt.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
//流式布局
public class TestFlowLayout {
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
j.setLayout(new FlowLayout());//不传参数默认居中
j.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
JButton button3 = new JButton("button3");
JButton button4 = new JButton("button4");
JButton button5 = new JButton("button5");
JButton button6 = new JButton("button6");
j.add(button1);
j.add(button2);
j.add(button3);
j.add(button4);
j.add(button5);
j.add(button6);
}
}
运行结果:
1.2BordeLayout布局管理器
BorderLayout是JFrame和JDialog两种容器的默认布局管理器,它将容器分为5个部分,分别命名为North,South、West、East和Center。在使用这种布局管理器管理组件的排列时,需要为组件指明放的具体位置,默认位置为中间位置。如果将组件位置放在North或South,组件的宽度将延长至与容器一样宽, 而高度不变:如果将组件放在West或Fast,组件的高度将延长至容器的高度减去North和South之后的高度.而寬度不变。不一定所有的区域都有组件.如果四周的区域( West、East.North、South区域)没有组件,则由Center区域去补充。如果将两个组件放在同一位置,后面放置的组件将覆盖前面放置的组件。
BorderLayout类提供了两种格式的构造方法。
(1)BorderLayout():无参数的构造方法,创建一个组件之间水 平和垂直间距均为零的布局管理器对象。
(2)BorderLayout(int hgap,int vgap): 创建一个组件之间水平间距为hgap、垂直间距为vgap的布局管理器对象。
实例如下:
package com.hg.day27.demo03;
import javax.swing.*;
import java.awt.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
//边界布局
public class TestBorderLayout {
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
JButton east = new JButton("east");
JButton west = new JButton("west");
JButton south = new JButton("south");
JButton north = new JButton("north");
JButton center = new JButton("center");
j.add(east,BorderLayout.EAST);
j.add(west,BorderLayout.WEST);
j.add(south,BorderLayout.SOUTH);
j.add(north,BorderLayout.NORTH);
j.add(center,BorderLayout.CENTER);
}
}
运行结果:
1.3GridLayout布局管理器
GridLayout布局管理器将整个容器划分成N行M列的网格,平均占据容器的空间。布局时,按照组件加入的顺序优先考虑按行布局,当行布局满之后再布局下一行(每行只能布局M个组件)。只有当行列不能满足指定的数值(N* M小于组件个数)时,才按行扩展。
有两种将组件放入容器的方法:一是使用默认的布局顺序即按照从上到下从左到右的次序将组件放人容器的每个网格中二是采用add(Compoment comp,int index) 方法将组件放人指定的网格中。
Grial ayout类提供了下面3种格式的构造方法。
(1)Gridl Layout(),无参数的构造方法,,创建一个一行内放置所有组件的网格布局管理器对象,组件之间没有间隙。
(2)GridLayout(int rows,int cols),这个构造方法将创建一个rows行、colsl列的网格布局管理器对象,组件之间没有间隙。
(3)GridLayout(int rows,int hgap,int vgap):创建一个rows行、cols列的网格布局管理器对象,组件之间的的水平间距为
hgap,垂直间距为vgap。
实例演示:
package com.hg.day27.demo03;
import javax.swing.*;
import java.awt.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
//网格布局
public class TestGrid {
public static void main(String[] args) {
JFrame j = new JFrame();
j.setVisible(true);
j.setBounds(100,100,700,500);
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
j.setLayout(new GridLayout(3,2));
JButton button1 = new JButton("button1");
button1.setSize(50,50);
JButton button2 = new JButton("button2");
button2.setSize(50,50);
JButton button3 = new JButton("button3");
JButton button4 = new JButton("button4");
JButton button5 = new JButton("button5");
JButton button6 = new JButton("button6");
j.add(button1);
j.add(button2);
j.add(button3);
j.add(button4);
j.add(button5);
j.add(button6);
j.pack();
}
}
运行结果: