java 实验5 图形用户界面设计试验

常用布局

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);
        
    }
}

结果

 

猜你喜欢

转载自www.cnblogs.com/cc123nice/p/10741129.html