• 第十二周课程总结


    上机课实验:计算器

    源代码:

    package diyishiba;
    import java.awt.*;
    import javax.swing.*;
    public class Jisuanqi {
    
    	public static void main(String[] args) {
    		JFrame jfr=new JFrame("计算器");
    		JTextField jte=new JTextField(30);
    		JButton jbu11=new JButton("%");
    		JButton jbu12=new JButton("sqrt");
    		JButton jbu13=new JButton("pow");
    		JButton jbu14=new JButton("1/x");
    		JButton jbu21=new JButton("CE");
    		JButton jbu22=new JButton("C");
    		JButton jbu23=new JButton("<--");
    		JButton jbu24=new JButton("/");
    		JButton jbu31=new JButton("7");
    		JButton jbu32=new JButton("8");
    		JButton jbu33=new JButton("9");
    		JButton jbu34=new JButton("*");
    		JButton jbu41=new JButton("4");
    		JButton jbu42=new JButton("5");
    		JButton jbu43=new JButton("6");
    		JButton jbu44=new JButton("-");
    		JButton jbu51=new JButton("1");
    		JButton jbu52=new JButton("2");
    		JButton jbu53=new JButton("3");
    		JButton jbu54=new JButton("+");
    		JButton jbu61=new JButton("+/-");
    		JButton jbu62=new JButton("0");
    		JButton jbu63=new JButton(".");
    		JButton jbu64=new JButton("=");
    		
    		
    		jfr.setLayout(null);
    		jte.setBounds(10, 10, 333, 80);
    		jbu11.setBounds(10, 90, 83, 40);
    		jbu12.setBounds(93, 90, 83, 40);
    		jbu13.setBounds(176, 90, 83, 40);
    		jbu14.setBounds(259, 90, 83, 40);
    		jbu21.setBounds(10, 130, 83, 40);
    		jbu22.setBounds(93, 130, 83, 40);
    		jbu23.setBounds(176, 130, 83, 40);
    		jbu24.setBounds(259, 130, 83, 40);
    		jbu31.setBounds(10, 170, 83, 40);
    		jbu32.setBounds(93, 170, 83, 40);
    		jbu33.setBounds(176, 170, 83, 40);
    		jbu34.setBounds(259, 170, 83, 40);
    		jbu41.setBounds(10, 210, 83, 40);
    		jbu42.setBounds(93, 210, 83, 40);
    		jbu43.setBounds(176, 210, 83, 40);
    		jbu44.setBounds(259, 210, 83, 40);
    		jbu51.setBounds(10, 250, 83, 40);
    		jbu52.setBounds(93, 250, 83, 40);
    		jbu53.setBounds(176, 250, 83, 40);
    		jbu54.setBounds(259, 250, 83, 40);
    		jbu61.setBounds(10, 290, 83, 40);
    		jbu62.setBounds(93, 290, 83, 40);
    		jbu63.setBounds(176, 290, 83, 40);
    		jbu64.setBounds(259, 290, 83, 40);
    		
    		
    		
    		
    		
    		
    		jfr.add(jte);
    		jfr.add(jbu11);
    		jfr.add(jbu12);
    		jfr.add(jbu13);
    		jfr.add(jbu14);
    		jfr.add(jbu21);
    		jfr.add(jbu22);
    		jfr.add(jbu23);
    		jfr.add(jbu24);
    		jfr.add(jbu31);
    		jfr.add(jbu32);
    		jfr.add(jbu33);
    		jfr.add(jbu34);
    		jfr.add(jbu41);
    		jfr.add(jbu42);
    		jfr.add(jbu43);
    		jfr.add(jbu44);
    		jfr.add(jbu51);
    		jfr.add(jbu52);
    		jfr.add(jbu53);
    		jfr.add(jbu54);
    		jfr.add(jbu61);
    		jfr.add(jbu62);
    		jfr.add(jbu63);
    		jfr.add(jbu64);
    		
    		
    		jfr.setSize(375, 370);
    		jfr.setVisible(true);
    	}
    
    }
    

    运行截图:

    课程总结:

    其他容器:

    一、JPanel

    用途:

    应用:可以将多个组件加入到JPanel中实现复杂的排列。

    如下图所示:

    JPanel类的常用方法:

    序号 方法 类型 描述
    1 public JPanel() 构造 创建一个默认的JPanel对象,使用流布局管理
    2 public JPanel(LayoutManager layout) 构造 创建一个指定布局管理器的JPanel对象

    例子:

    package diyishiba;
    import java.awt.*;
    import javax.swing.*;
    public class JPanelDemo01 {
    
    	public static void main(String[] args) {
    		JFrame jfr=new JFrame("窗口");
    		JPanel jpa=new JPanel();
    		
    		jpa.add(new JLabel("一"));
    		jpa.add(new JLabel("棵"));
    		jpa.add(new JLabel("树"));
    		jpa.add(new JButton("JAVA"));
    		jpa.add(new JButton("好"));
    		jpa.add(new JButton("难"));
    		
    		jfr.add(jpa);
    		
    		jfr.setSize(400, 300);
    		jfr.setVisible(true);
    	}
    
    }
    

    运行截图:

    二、JSplitPane

    用途:

    如下图所示:

    JSplitPanel类的主要方法及常量

    例子:

    package diyishiba;
    import java.awt.*;
    import javax.swing.*;
    public class JSplitPaneDemo01 {
    
    	public static void main(String[] args) {
    		JFrame jfr=new JFrame("窗口");
    		JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JLabel("这是左窗口"),new JLabel("这是右窗口"));
    		JSplitPane jsp1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jsp,new JLabel("这是下窗口"));
    		
    		jfr.add(jsp1);
    		
    		jsp.setDividerLocation(170);
    		jsp1.setDividerLocation(130);
    		jsp.setOneTouchExpandable(true);
    		jsp1.setOneTouchExpandable(true);
    		jsp.setDividerSize(3);
    		
    		
    		jfr.setSize(400, 300);
    		jfr.setVisible(true);
    		
    	}
    
    }
    

    运行截图:

    三、JTabbedPane

    如下图所示:


    JTabbedPane类的常用方法及常量:

    例子:

    package diyishiba;
    import java.awt.*;
    import javax.swing.*;
    public class JTabbedPaneDemo01 {
    
    	public static void main(String[] args) {
    		JFrame jfr=new JFrame("窗口");
    		JPanel jpa1=new JPanel();
    		JPanel jpa2=new JPanel();
    		JTabbedPane jta=new JTabbedPane(JTabbedPane.TOP);
    		
    		
    		jpa1.add(new JLabel("常规"));
    		jpa2.add(new JLabel("高级"));
    		
    		
    		jta.addTab("常规",jpa1);
    		jta.addTab("高级", jpa2);
    		jta.addTab("远程", null);
    		
    	
    		Container con=jfr.getContentPane();
    		con.add(jta);
    		
    		jfr.setSize(400, 300);
    		jfr.setVisible(true);
    		
    	}
    
    }
    

    运行截图:

    四、JScrollPane

    定义:

    组成:

    JScrollPane类的常用方法及常量:

    例子:

    package diyishiba;
    import java.awt.*;
    import java.io.File;
    
    import javax.swing.*;
    public class JScrollPaneDemo01 {
    
    		public static void main(String[] args) {
    			JFrame jfr=new JFrame("窗口");
    			String path="G:"+File.separator+"程序员搞笑.jpg";
    			ImageIcon ic=new ImageIcon(path);
    			JLabel jla=new JLabel(ic);
    			JPanel jpa=new JPanel();
    			jpa.add(jla);
    			JScrollPane jsc=new JScrollPane(jpa,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    			
    			jfr.add(jsc);
    			jfr.setSize(400, 300);
    			jfr.setVisible(true);
    		}
        }
    

    运行截图:

    五、JDesktopPaneJIntenrnalFrame

    用途:

    规定:

    JDesktopPane类的常用方法:

    JInternalFrame类的常用方法:

    例子:

    package diyishiba;
    import java.awt.*;
    import javax.swing.*;
    public class JDesktopPaneDemo01 {
    
    	public static void main(String[] args) {
    		JFrame jfr=new JFrame("多窗口");
    		jfr.setLayout(new BorderLayout());
    		JDesktopPane jde=new JDesktopPane();
    		jfr.add(jde,BorderLayout.CENTER);
    		for(int i=0;i<3;i++) {
    			JInternalFrame jin=new JInternalFrame("内窗口",true,true,true,true);
    			JPanel jpa=new JPanel();
    			jpa.add(new JLabel("内窗口"+i));
    			jin.add(jpa);
    			jin.setLocation(35-i*10, 35-i*10);
    			jin.pack();
    			jin.setVisible(true);
    			jde.add(jin);
    		}
    		jfr.setSize(300, 270);
    		jfr.setVisible(true);
    	}
    
    }
    

    运行截图:

    六、事件处理

    事件和监听器:


    如下图所示:

    Java事件处理流程

    要先理解事件源与事件监听器的概念,如下所示:

    处理事件的概念:

    如下所示:

    七、窗体事件

    定义:

    WindowListener接口的方法:

    例子:

    实现接口

    package diyishiba;
    import java.awt.event.*;
    import java.awt.event.WindowListener;
    public class WindowListenerDemo01 implements WindowListener{
    
    	public void windowOpened(WindowEvent e) {
    		System.out.println("窗口被打开");
    		
    	}
    
    	
    	public void windowClosing(WindowEvent e) {
    		System.out.println("窗口正在被关闭");
    		
    	}
    
    	@Override
    	public void windowClosed(WindowEvent e) {
    		System.out.println("窗口被关闭");
    		
    	}
    
    	@Override
    	public void windowIconified(WindowEvent e) {
    		System.out.println("窗口最小化");
    		
    	}
    
    	@Override
    	public void windowDeiconified(WindowEvent e) {
    		System.out.println("窗口最大化");		
    	}
    
    	@Override
    	public void windowActivated(WindowEvent e) {
    		System.out.println("窗口被选中");
    		
    	}
    
    	@Override
    	public void windowDeactivated(WindowEvent e) {
    		System.out.println("窗口没被选中");
    		
    	}
    	
    	
    }
    

    测试类:

    package diyishiba;
    import java.awt.Color;
    
    import javax.swing.*;
    public class Test {
    
    	public static void main(String[] args) {
    			JFrame jfr=new JFrame("窗口");
    			WindowListenerDemo01 win=new WindowListenerDemo01();
    			jfr.addWindowListener(win);
    			JPanel jpa=new JPanel();
    			jpa.setBackground(Color.GRAY);
    			jfr.add(jpa);
    			jfr.setSize(400, 300);
    			jfr.setVisible(true);
    	}
    
    }
    

    运行截图:



    八、适配器类:

    定义:

    例子:

    package diyishiba;
    import java.awt.Color;
    import java.awt.event.*;
    import javax.swing.*;
    public class Test1 {
    
    	public static void main(String[] args) {
    			JFrame jfr=new JFrame("窗口");
    			jfr.addWindowListener(new WindowAdapter() {
    				public void windowClosed(WindowEvent e) {
    					System.out.println("窗口被关闭");
    				}
    				public void windowOpened(WindowEvent e) {
    					System.out.println("窗口被打开");
    				}
    			});
    			jfr.setSize(400, 300);
    			JPanel jpa=new JPanel();
    			jpa.setBackground(Color.BLUE);
    			jfr.add(jpa);
    			jfr.setVisible(true);
    	}
    
    }
    

    运行截图:


    问题:发现窗口关闭时并没有输出语句。前面那个例子也是这样,其他的语句都能输出就是窗口关闭时的语句不能输出,不知道是哪里出现问题了。还望助教指点下。

    九、动作事件及监听处理

    定义:



    例子:

    package diyishiba;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    class ActionListenerDemo01 {
    		JFrame jfr=new JFrame("窗口");
    		JButton jbu=new JButton("显示");
    		JLabel jla=new JLabel();
    		JTextField jte=new JTextField(10);
    		JPanel jpa=new JPanel();
    		public ActionListenerDemo01() {
    			Font font=new Font("幼圆",Font.BOLD+Font.ITALIC,28);
    			jla.setFont(font);
    			jla.setText("等待用户输入信息");
    			jbu.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					if(e.getSource()==jbu) {
    						jla.setText(jte.getText());
    					}
    					
    				}
    				
    			});
    		jfr.setLayout(new GridLayout(2,1));
    		jpa.setLayout(new GridLayout(1,2));
    		jpa.add(jte);
    		jpa.add(jbu);
    		jfr.add(jpa);
    		jfr.add(jla);
    		jfr.pack();
    		jfr.setVisible(true);
    		}
    	public static void main(String[] args) {
    		new ActionListenerDemo01();
    
    	}
    
    }
    

    运行截图:



  • 相关阅读:
    二分查找经典题型
    部队侦察
    取随机数函数的使用
    猜拳游戏
    Learning C Struct
    Linux shell get random number
    Linux Bash shell one practice : array if else
    Linux shell misc
    Bash Shell read file line by line and substring
    storm的并发和消息保障性
  • 原文地址:https://www.cnblogs.com/lcbxhda/p/11847758.html
Copyright © 2020-2023  润新知