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

    结果

     

  • 相关阅读:
    初涉SQL Server性能问题(2/4):列出等待资源的会话
    初涉SQL Server性能问题(1/4):服务器概况
    分享
    React Native 自定义radio 单选or多选
    css之定位
    小小小小小小之新闻案例
    paddingmargin的属性与连写
    css标准流和浮动
    css 伪类
    css元素的显示方式
  • 原文地址:https://www.cnblogs.com/cc123nice/p/10741129.html
Copyright © 2020-2023  润新知