模块8 图形用户界面编程2
2.JDialog
1.最常用的构造方法:
JDialog(所属窗口,标题,模式)(真模态,假模态)
与JFrame一样,JDialog(对话框窗口)也是一种顶级容器,但不能作为独立的窗口容器使用,必须依附于某个窗口(通常是JFrame)。其实在应用程序中主要是使用模态对话框,模态对话框常用来给予用户简单的提示或选择。创建模态对话框常使用类(JOptionPlane),在类(JOptionPlane)中内部会自动创建一个JDialog并将自己添加到该对话框的内容窗口中。
2.JDialog运用举例:
package com.java.top;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class DemoJDialog {
public static void main(String[] args) {
//创建对话框
JDialog d = new JDialog (r,"第一个窗口",true);
d.setSize(400, 300);
d.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
d.setVisible(true);
}
}
中间容器
主要包括:
面板容器类(JPanel类),分隔窗格(JSplitPane类,,使用较少),
带滚动条的窗格容器(JScrollPane类),工具栏(JToolBar类)等。
面板容器与顶层容器不同,它不能独立存在,必须被添加到其他容器内部。面板可以嵌套,从而设计出复杂的图形用户界面。
JPanel运用举例练习1:
package com.java.middle;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DemoJPanel1 {
public static void main(String[] args) {
//练习·1:新建类DemoJPanel1,创建p1,p2,p3三个面板,背景颜色分别为黄,绿,粉
// 创建窗口f,标题为“面板展示”,将p1添加到f中,将p2添加到p1中,将p3添加到p2中
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
p1.setBackground(Color.yellow);
p2.setBackground(Color.green);
p3.setBackground(Color.pink);
JFrame f = new JFrame("面板展示");
f.setSize(400, 300);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
f.add(p1);
p1.add(p2);
p2.add(p3);
}
}
JPanel运用举例练习2:
package com.java.middle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class DemoJPanel2 {
public static void main(String[] args) {
//练习2:新建类DemoJPanel2。创建一个JPanel面板p,一个JLabel标签l,一个LButton按钮 b,
// 一个JTextField文本框t,一个窗口f。将面板添加到窗口中,标签,按钮,文本框均添加到面板中
JPanel p = new JPanel();
JLabel l = new JLabel("标签");
JButton b = new JButton("按钮");
JTextField t = new JTextField(10);
JFrame f = new JFrame();
f.add(p);
p.add(l);
p.add(b);
p.add(t);
f.setSize(400, 300);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
}
}
JScrollPane滚动面板(常用)
JScrollPane的一般用法是先将一些组件添加到一个JPane中,然后再把这个JPane添加到JScrollPane
常用的构造方法:空参构造
常用方法:
(1)void setViewportView(Component view);添加组件
(2)void setHorizontalScrollBarPolicy(int policy);设置水平滚动条策略
(3)void setVerticalScrollBarPolicy(int policy);设置垂直滚动条策略
滚动策略常量:
(1)根据需要自动显示(默认值)
VERTICAL_SCROLLBAR_AS_NEEDED
HORIZONTAL_SCROLLBAR_AS_NEEDED
(2)始终显示
VERTICAL_SCROLLBAR_ALWAYS
HORIZONTAL_SCROLLBAR_ALWAYS
(3)不显示
VERTICAL_SCROLLBAR_NEVER
HORIZONTAL_SCROLLBAR_NEVER
标签:
JLabel();无参构造
JLabel(Icon image);构造一个显示图标的标签
JLabel(String text);构造一个显示文本的标签
按钮:
JButton();无参构造
JButton(Icon icon);创建一个图标为icon的按钮对象
JButton(String text);创建一个文本信息为text的按钮对象
JScrollPane的运用举例练习:
package com.java.middle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class TestJScrollPane {
public static void main(String[] args) {
//练习:三个按钮放在面板中,面板放在滚动条面板中,滚动条面板放在窗口中
JPanel p = new JPanel();//面板
JButton b1 = new JButton("按钮一");
JButton b2 = new JButton("按钮二");
JButton b3 = new JButton("按钮三");
JScrollPane s = new JScrollPane();
JFrame f = new JFrame();//窗口
p.add(b1);
p.add(b2);
p.add(b3);
f.add(s);//滚动条面板添加到窗口中
f.setSize(400, 300);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
s.setViewportView(p); //往滚动条面板中添加组件
s.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
}
布局管理:
每个容器(如顶层容器的内容窗格)都有一个默认的布局,管理器开发者可以通过容器的set layout()方法改变容器的布局管理器
常用布局:
边界布局:BorderLayout
流式布局:FlowLayout
网格布局:GridLayout
容器设置布局:
setLayout(布局类的对象)
如:f.setLayout(new FlowLayout())
1.BorderLayout布局管理器:
BorderLayout是JFrame和JDialog两种容器的默认布局管理器。
BorderLayout类提供了两种的构造方法:
(1)BorderLayout();无参数的构造方法
(2)BorderLayout(int hgap,int vgap); 创建一个组件之间水平间距为hgap,垂直间距为 vgap的布局管理器对象
BorderLayout举例练习:
package com.java.layout;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DemoBorderLayout {
public static void main(String[] args) {
//新建类DemoBorderLayout
//创建五个面板p1p2p3p4p5,用五种不同的颜色作为面板背景色。
//创建一个400宽400高的窗口,(窗口采用边界布局),将五个面板分别添加到东南西北中五个区域
JFrame f = new JFrame();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();
p1.setBackground(Color.blue);
p2.setBackground(Color.pink);
p3.setBackground(Color.gray );
p4.setBackground(Color.green);
p5.setBackground(Color.orange);
f.setSize(400, 400);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
f.setLayout(new BorderLayout());
f.add(p1,BorderLayout.EAST);
f.add(p2,BorderLayout.SOUTH);
f.add(p3,BorderLayout.WEST);
f.add(p4,BorderLayout.NORTH);
f.add(p5,BorderLayout.CENTER);
}
}
2.FlowLayout布局管理器:
FlowLayout定义在java. awt包中,是JPanel容器的默认布局容器。它按照一行放满后就另起一行,默认居中。
FlowLayout类提供了三种的构造方法:
(1)FlowLayout();无参构造
(2)FlowLayout(int align);创建一个对齐方式为align的布局管理器对象.
align取值:LEFT, RIDHT, CENTER, FEADING, TRAILING
(3)FlowLayout(int align,int hgap,int vgap );创建一个对齐方式为align,水平间距为hgap像素,垂直间距为vgap像素的布局管理器对象
FlowLayout举例练习:
package com.java.layout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DemoFlowLayout {
public static void main(String[] args) {
//新建类DemoFlowLayout
//创建五个按钮(JButton)b1 b2b 3b4b5,创建一个400宽,400高的窗口,
//窗口采用流式布局,将五个按钮添加到窗口中
JFrame f = new JFrame();
JButton b1 = new JButton("按钮一");
JButton b2 = new JButton("按钮二");
JButton b3 = new JButton("按钮三");
JButton b4 = new JButton("按钮四");
JButton b5 = new JButton("按钮五");
f.setSize(400, 400);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
f.setLayout(new FlowLayout());
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
}
}
3.GridLayout布局管理器:
如:f.setLayout(new GridLayout(行,列))
GridLayout类提供了三种的构造方法:
(1)GridLayout();无参构造
(2)GridLayout(int rows,int cols);创建一个 rows行, cols列的网格布局管理器对象, 组件之间没有间隙.
(3)GridLayout(int rows,int cols,int hgap,int vgap);创建一个 rows行, cols列的网格布局管理器对象, 组件之间的水平间距为hgap,垂直间距为vgap
GridLayout举例练习:
package com.java.layout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DemoGridLayout {
public static void main(String[] args) {
JFrame f = new JFrame();
// JButton b1 = new JButton("按钮一");
// JButton b2 = new JButton("按钮二");
// JButton b3 = new JButton("按钮三");
// JButton b4 = new JButton("按钮四");
// JButton b5 = new JButton("按钮五");
// JButton b6 = new JButton("按钮六");
// JButton b7 = new JButton("按钮七");
// JButton b8 = new JButton("按钮八");
// JButton b9 = new JButton("按钮九");
for(int i=1;i<10;i++) {
JButton p = new JButton("按钮"+i);
f.add(p);
}//代替已注释的代码
f.setLayout(new GridLayout(3,3));//创建表格三行三列
// f.add(b1);
// f.add(b2);
// f.add(b3);
// f.add(b4);
// f.add(b5);
// f.add(b6);
// f.add(b7);
// f.add(b8);
// f.add(b9);
f.setSize(400, 400);//设置窗口大小(宽,高) 【】【】
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮时退出程序 【】【】
f.setVisible(true);//显示窗口 【】【】
}
}