常用布局
1)、流布局:
FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化.
容器.setLayout(new FlowLayout(FlowLayout.LEFT));
2)、网格布局:
GridLayout 按照指定行数与列数,将容器分成大小相等的单元格每个单元格放置一个控件. 不能将控件放在指定单元格
容器.setLayout(new GridLayout(3,4,10,15));
3)、边界布局:
BorderLayout 将容器分成东、西、南、北、中五个部分
容器.setLayout(new BorderLayout());
窗口的内容面板默认布局就是边界布局。
容器.add(控件,BorderLayout.NORTH);
4)、混合布局:
使用JPanel,将多个布局组合在一起使用
5)、绝对布局 null:
以坐标定位
容器.setLayout(null);
每个控件在放置在容器之前,必须设置其边界 setBounds(x,y,width,height);
btn.setBounds(10,100,30,60);
常用事件
1)、事件源 EventSource:能够触发事件控件 如:JButton,JTextField,JFrame,JComboBox,....
2)、事件 Event:ActionEvent,KeyEvent,WindowEvent,TextEvent,...
3)、事件侦听者Listener(接口) ActionListener,WindowListener,...
class A implements ActionListener{
public void actionPerformed(ActionEvent e){
....
}
}
A lis=new A();
4)、事件处理函数
public void actionPerformed(ActionEvent e){
....
}
事件流程:事件源触发事件-->事件源侦听者接收事件-->自动调用相应事件处理函数.
实践编程
1.在应用程序窗体中安排1个文本框,一个标签。在文本框输入一个数字(0-9),按回车键,在标签处显示对应的英文单词。 0---zero,1---one,....
窗体类:
package 简单数字对应窗体;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Numcompare extends JFrame{
JTextField text;
JLabel label;
Numcompare(){
setTitle("Number change");
//限制输入一个数字
text=new JTextField(10);
label=new JLabel();
label.setText("请输入0-9的数字");
text.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String getstr=text.getText();
String showstr=null;
switch (getstr) {
case "0":
showstr="zero";
break;
case "1":
showstr="one";
break;
case "2":
showstr="two";
break;
case "3":
showstr="three";
break;
case "4":
showstr="four";
break;
case "5":
showstr="five";
break;
case "6":
showstr="six";
break;
case "7":
showstr="seven";
break;
case "8":
showstr="eight";
break;
case "9":
showstr="nine";
break;
default:
showstr=("请输入0-9的数字");
break;
}
label.setText(showstr);
text.setText(null);
}
});
setLayout(new FlowLayout());
add(text);
add(label);
setBounds(100,100,460,190);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);;
}
}
实现类(注:以下省略实现类--实例化自定义窗体)
package 简单数字对应窗体;
public class test {
public static void main(String[] args) {
new Numcompare();
}
}
结果:
2.在应用程序窗体中安排两个文本框分别用来输入两个整数,两个按钮分别为 “+”,“*”,一个结果标签。点击按纽“+”将两文本框的数据做加法运算;点击按钮“*”做乘法运算,将结果显示在标签中。
窗体类:
package 简单计算窗体;
import java.awt.event.*;
import java.math.BigInteger;
import java.awt.*;
import javax.swing.*;
public class Caculate extends JFrame{
JTextArea text1,text2;
JButton jb1,jb2;
JLabel label;
Caculate(){
text1=new JTextArea(2,4);
text2=new JTextArea(2,4);
jb1=new JButton("+");
jb2=new JButton("*");
label=new JLabel();
JSplitPane p1;
JPanel p2=new JPanel();
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String n1=text1.getText();
String n2=text2.getText();
try {
BigInteger num1=new BigInteger(n1);
BigInteger num2=new BigInteger(n2);
label.setText((num1.add(num2)).toString());
}catch (Exception ee) {
label.setText("请输入整数");
text1.setText(null);
text2.setText(null);
}
}
});
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String n1=text1.getText();
String n2=text2.getText();
try {
BigInteger num1=new BigInteger(n1);
BigInteger num2=new BigInteger(n2);
label.setText((num1.multiply(num2)).toString());
}catch (Exception ee) {
label.setText("请输入整数");
text1.setText(null);
text2.setText(null);
}
}
});
setLayout(new GridLayout(3,1));
p1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,text1,text2);
p1.setDividerLocation(117);
add(p1);
p2.setLayout(new GridLayout(1,2));
p2.add(jb1);
p2.add(jb2);
add(p2);
add(label);
setBounds(100,100,260,190);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
} }
结果:
3.设计合理的布局生成下图所示的图形界面,并编写事件处理程序实现以下功能:按“产生”按钮,产生两个随机数并分别显示在“数字一”和“数字二”对应的文本框内,按“计算”按钮,计算产生的这两个随机数之和,并显示在“结果”对应的文本框内。
窗体类
package 随机数和; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import javax.swing.*;
public class RandomAdd extends JFrame{
JLabel label1=new JLabel("数字一");
JLabel label2=new JLabel("数字二");
JLabel label3=new JLabel("结果");
JButton jb1=new JButton("产生");
JButton jb2=new JButton("计算");
RandomAdd(){
setTitle("随机生成数 相加计算");
JTextArea ja1=new JTextArea(2,4);
JTextArea ja2=new JTextArea(2,4);
JTextArea ja3=new JTextArea(2,4);
Box basebox,box1,box2;
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ja1.setText(Math.random()*100+"");
ja2.setText(Math.random()*100+"");
ja3.setText(null);
}
});
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
BigDecimal num1 = new BigDecimal(ja1.getText());
BigDecimal num2 = new BigDecimal(ja2.getText());
ja3.setText(num1.add(num2).toString());
}catch (Exception ee) {
ja3.setText("请点击产生键");
}
}
}); box1=Box.createVerticalBox();
box1.add(label1);
box1.add(Box.createHorizontalStrut(8));
box1.add(label2);
box1.add(Box.createHorizontalStrut(8));
box1.add(label3);
box1.add(Box.createHorizontalStrut(8));
box2=Box.createVerticalBox();
box2.add(ja1);
box2.add(Box.createHorizontalStrut(8));
box2.add(ja2);
box2.add(Box.createHorizontalStrut(8));
box2.add(ja3);
box2.add(Box.createHorizontalStrut(8));
basebox=Box.createHorizontalBox();
basebox.add(box1);
basebox.add(Box.createHorizontalStrut(80));
basebox.add(box2); setLayout(new GridLayout(2,1));
JPanel jp=new JPanel();
add(basebox);
jp.add(jb1);
jp.add(jb2);
add(jp);
setBounds(100,100,260,190);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
结果
4、编写程序实现如下界面,实现事件如果按下座位i 就在控制台中显示“座位i被选中” 例如按下 “座位0“,则输出座位0被选中”。
窗体类
package 选座位;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*; import javax.swing.*;
public class ChooseChair extends JFrame implements ActionListener{
ChooseChair(){
JButton jb0=new JButton("座位0");
JButton jb1=new JButton("座位1");
JButton jb2=new JButton("座位2");
JButton jb3=new JButton("座位3");
JButton jb4=new JButton("座位4");
JButton jb5=new JButton("座位5");
jb0.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);
jb5.addActionListener(this);
JLabel label=new JLabel("讲台",JLabel.CENTER);
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(2,3));
jp.add(jb0);
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
jp.add(jb4);
jp.add(jb5);
add(jp,BorderLayout.CENTER);
add(label,BorderLayout.NORTH);
setBounds(100,100,260,190);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand()+"被选中");
}
}
结果:
5、完成以下窗*作
窗体类
package 图书馆办证; import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class LibraryRegister extends JFrame{
LibraryRegister(){
setTitle("图书馆办理");
JLabel label0=new JLabel("图书证注册");
JLabel label1=new JLabel("姓名:");
JLabel label2=new JLabel("性别:");
JLabel label3=new JLabel("身份:");
JLabel label4=new JLabel("单位:");
JLabel label5=new JLabel("证件号码:");
JLabel label6=new JLabel("注册日期:");
JLabel label7=new JLabel("有效日期:");
JTextField ja1=new JTextField();
JTextArea ja2=new JTextArea(1,1);
JTextArea ja3=new JTextArea(1,1);
JTextArea ja4=new JTextArea(1,1);
JComboBox jm1=new JComboBox();
JComboBox jm2=new JComboBox();
JComboBox jm3=new JComboBox(); jm1.addItem("男");
jm1.addItem("女");
jm2.addItem("学生");
jm2.addItem("老师");
jm3.addItem("计算机系");
jm3.addItem("英语系");
jm3.addItem("国交系");
JPanel jp1=new JPanel();
JPanel jp2=new JPanel(); JButton jb1=new JButton("添加");
JButton jb2=new JButton("删除");
JButton jb3=new JButton("撤销");
JButton jb4=new JButton("退出");
Box basebox,box1,box2; //上部
jp1.add(label0); //中部
box1=Box.createVerticalBox();
box1.add(label1);
box1.add(Box.createVerticalStrut(15));
box1.add(label2);
box1.add(Box.createVerticalStrut(15));
box1.add(label3);
box1.add(Box.createVerticalStrut(15));
box1.add(label4);
box1.add(Box.createVerticalStrut(15));
box1.add(label5);
box1.add(Box.createVerticalStrut(15));
box1.add(label6);
box1.add(Box.createVerticalStrut(15));
box1.add(label7);
box2=Box.createVerticalBox();
box2.add(ja1);
box2.add(Box.createVerticalStrut(8));
box2.add(jm1);
box2.add(Box.createVerticalStrut(8));
box2.add(jm2);
box2.add(Box.createVerticalStrut(8));
box2.add(jm3);
box2.add(Box.createVerticalStrut(8));
box2.add(ja2);
box2.add(Box.createVerticalStrut(8));
box2.add(ja3);
box2.add(Box.createVerticalStrut(8));
box2.add(ja4);
basebox=Box.createHorizontalBox();
basebox.add(box1);
basebox.add(Box.createHorizontalStrut(200));
basebox.add(box2); //底部按钮 懒得实现
jp2.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4); setLayout(new BorderLayout());
add(jp1,BorderLayout.NORTH); add(basebox);
add(jp2,BorderLayout.SOUTH);
setBounds(100,100,500,325);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
结果
6、运用Swing控件完成下题
package 借用物品; import java.awt.Dimension;
import java.awt.GridLayout; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField; public class BorrowItem extends JFrame{
BorrowItem(){
setTitle("借用物品");
JLabel label1=new JLabel("员工编号:");
JLabel label2=new JLabel("借用器具:");
JLabel label3=new JLabel("借用日期:");
JLabel label4=new JLabel("归还日期:");
JLabel label5=new JLabel("借用原因:");
JTextField text1=new JTextField(9);
JTextField text2=new JTextField(9);
JTextField text3=new JTextField(9);
JTextField text4=new JTextField(9);
JTextField text5=new JTextField(25);
JButton jb1=new JButton("确定");
JButton jb2=new JButton("取消");
Dimension preferredSize = new Dimension(160,30);//设置尺寸
jb1.setPreferredSize(preferredSize );
jb2.setPreferredSize(preferredSize ); setLayout(new GridLayout(4,1));
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
jp1.add(label1);
jp1.add(text1);
jp1.add(label2);
jp1.add(text2);
jp2.add(label3);
jp2.add(text3);
jp2.add(label4);
jp2.add(text4);
jp3.add(label5);
jp3.add(text5);
jp4.add(jb1);
jp4.add(jb2); add(jp1);
add(jp2);
add(jp3);
add(jp4); setBounds(100,100,350,180);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); }
}
结果