⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java10.txt

📁 达内IT培训Core Java全部笔记 是学习Java编程的好东西
💻 TXT
字号:
事件	所有事件都具有三个要素:	事件源:一个事件的发起者(按钮)	//落实在类上(组件负责生成事件源,事件源产生时间对象传递给事件监听,监听在对事件源进行处理)	事件对象:用来描述发生什么事情,是一个描述者,通知JVM发生点击具体事件	事件监听:一个事件的处理者	//接口(类和接口,接口强制要求他的子类来实现它的方法)监听应该跟事件源打交道	没有方法的接口:标识接口(EventListener,Cloneable)	EventObject:	ActionEvent(最常用):点击操作(菜单,按钮),文本框回车,双击List组件	AdjustmentEvent(基本用不到)	ComponentEvent(基本用不到)	ItemEvent:勾选	TextEvent(用得也不多,因为不适用于swing组件):文本事件,文本组件中文字的变化	ContainerEvent:容器事件	FocusEvent:焦点事件,光标事件	InputEvent:输入事件(键盘鼠标)	WindowEvent:窗口事件所有的监听都是以接口的方式实现的(教程P63)计数窗口:-----------------------------------------------------------------------------------------package com.tarena.day10.gui;import java.awt.FlowLayout;import java.awt.event.*;import javax.swing.*;public class TestCount implements ActionListener{	private int count = 0;	JLabel jl = new JLabel("    0次");		public TestCount(){		JFrame jf = new JFrame("计数器");		JButton jb1 = new JButton("+");		JButton jb2 = new JButton("-");		jb1.addActionListener(this);		jb2.addActionListener(this);				jf.setLayout(new FlowLayout());		jf.add(jl);		jf.add(jb1);		jf.add(jb2);				jf.pack();		jf.setVisible(true);		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			}	public void actionPerformed(ActionEvent e) {			String comm = e.getActionCommand();			if("+".equals(comm)){				count++;			}else{				count--;			}			jl.setText(count+"次");			}	public static void main(String[] args) {			new TestCount();	}}-----------------------------------------------------------------------------------------计算器作业(支持连加/连减/连乘/连除):**注意:此程序还有最后一点bug,在连续计算过程中无法更换运算符,否则会计算出错**-----------------------------------------------------------------------------------------package calculater;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.math.BigDecimal;import javax.swing.*;public class Calculater implements ActionListener{	private String[] names = {"Backspace","CE","C","+","7","8","9","-","4","5","6","*","1","2","3","/","0","+/-",".","="};	private JButton[] jb = new JButton[names.length];	private boolean append = false;	private String operator = "+";	private String s1 = "0";	private String ss = "0";		JTextField jtf = new JTextField(20);		public Calculater() {}	public Calculater(String title){		JFrame jf = new JFrame(title);		JPanel jp = new JPanel();		jp.setLayout(new GridLayout(5,4));				for (int i = 0; i < jb.length; i++) {			jb[i] = new JButton(names[i]);			jb[i].addActionListener(this);			jp.add(jb[i]);		}				jf.add(jtf,BorderLayout.NORTH);		jf.add(jp);		jtf.setHorizontalAlignment(JTextField.RIGHT);		jtf.setText("0");		jtf.setEditable(false);				jf.pack();		jf.setVisible(true);		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	}		public void actionPerformed(ActionEvent e) {		String comm = e.getActionCommand();		if(comm.matches("\\d")){					//用正则表达式判断输出的是否是0~9						if(append){					String temp = jtf.getText();					jtf.setText(temp + comm);			}else{					jtf.setText(comm);					append = true;			}					}else if(comm.equals(".")){			String temp = jtf.getText();			if(temp.indexOf(".")== -1 && append){		//当输入的文本中没有小数点				jtf.setText(temp+comm);				append = true;										//输入小数点后继续追加			}else if(!append){			//当字符串开始时候先输入 " . " 则直接输出" 0. "				jtf.setText("0"+comm);				append = true;			}		}else if("+-*/".indexOf(comm)!= -1){			operator = comm;			s1 = jtf.getText();			double d3 = Double.parseDouble(s1);			double d4 = Double.parseDouble(ss);			BigDecimal bd3 = new BigDecimal(d3+"");			BigDecimal bd4 = new BigDecimal(d4+"");			if(operator.equals("+")){				d3 = bd3.add(bd4).doubleValue();				ss = d3+"";				jtf.setText(ss);			}else if(operator.equals("-")){				if(d4 == 0.0){					ss = s1;					jtf.setText(ss);				}else{					d3 = bd4.subtract(bd3).doubleValue();					ss = d3+"";					jtf.setText(ss);				}			}else if(operator.equals("*")){				if(d4 == 0.0){					ss = s1;					jtf.setText(ss);				}else{					d3 = bd3.multiply(bd4).doubleValue();					ss = d3+"";					jtf.setText(ss);				}			}else if(operator.equals("/")){				if(d4 == 0.0){					ss = s1;					jtf.setText(s1);				}else{					d3 = bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();				}				ss = d3+"";				jtf.setText(ss);							}			append = false;										//不继续追加		}else if(comm.equals("=")){			String s2 = jtf.getText();			double d1 = Double.parseDouble(ss);			double d2 = Double.parseDouble(s2);			BigDecimal bd1 = new BigDecimal(d1+"");			BigDecimal bd2 = new BigDecimal(d2+"");			if(operator.equals("+")){				d1 = bd1.add(bd2).doubleValue();			}else if(operator.equals("-")){				d1 = bd1.subtract(bd2).doubleValue();			}else if(operator.equals("*")){				d1 = bd1.multiply(bd2).doubleValue();			}else if(operator.equals("/")){		//精确计算浮点除法				if(d2!=0.0){					d1 = bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();				}			}			ss = "0";			jtf.setText(d1+"");			append = false;											//不继续追加		}else if(comm.equals("CE")||comm.equals("C")){			jtf.setText("0");			ss = "0";			append = false;		}else if(comm.equals("+/-")){			String temp = jtf.getText();			if(!append){				jtf.setText("-");				append = true;			}else if(temp.startsWith("-")){					//如果字符串以负号开头				jtf.setText(temp.substring(1));			}else{				jtf.setText("-" + temp);			}		}else if(comm.equals("Backspace")){			String temp = jtf.getText();			if(temp.length()>0){				jtf.setText(temp.substring(0,temp.length()-1));			}		}	}		public static void main(String[] args) {		new Calculater("Calculater");	}}-----------------------------------------------------------------------------------------int 21亿long 21亿* 21亿 用BigDecimal解决浮点运算精度问题,必须用String类型作参数:-----------------------------------------------------------------------------------------package com.tarena.day10.gui;import java.math.BigDecimal;public class TestBigDecimal {	public static void main(String[] args) {		double d1 = 1.0;		double d2 = 0.41;		System.out.println(d1-d2);		BigDecimal bd1 = new BigDecimal(d1);		BigDecimal bd2 = new BigDecimal(d2);		System.out.println(bd1.subtract(bd2).doubleValue());		//BigDecimal想要正确解决精度问题就要用String		BigDecimal bd3 = new BigDecimal(""+d1);		BigDecimal bd4 = new BigDecimal(""+d2);		System.out.println(bd3.subtract(bd4).doubleValue());		BigDecimal bd5 = new BigDecimal("5");		BigDecimal bd6 = new BigDecimal("3");		System.out.println(bd5.divide(bd6,5,BigDecimal.ROUND_HALF_UP).doubleValue());				//大数计算		String a1 = "123456789123456789123456789";		String a2 = "123456789123456789123456789";		BigDecimal bd7 = new BigDecimal(a1);		BigDecimal bd8 = new BigDecimal(a2);		System.out.println(bd7.add(bd8));	}}输出结果:0.59000000000000010.59000000000000010.591.66667246913578246913578246913578-----------------------------------------------------------------------------------------AWT.Swing中的菜单:	菜单栏(JMenuBar),菜单(JMenu),菜单项(JMenuItem)-----------------------------------------------------------------------------------------package com.tarena.day10.gui;import javax.swing.*;public class TestMenu {		public TestMenu(){			JFrame jf = new JFrame("TestMenu");			JMenuBar jmb = new JMenuBar();			String[] jml = {"File","Edit","Help"};			String[][] jmil = {{"New","Open","Save","Save as","","Exit"},{"ed1","ed2","ed3","","ed4"},{"h1","h2"}};			JMenu[] jm = new JMenu[jml.length];			JMenuItem[][] jmi = new JMenuItem[jmil.length][];			for (int i = 0; i < jml.length; i++) {				jm[i] = new JMenu(jml[i]);				jmi[i] = new JMenuItem[jmil[i].length];	//二维数组中会有空指针,要先NEW一次子数组才不会报错				for (int j = 0; j < jmil[i].length; j++) {					if(jmil[i][j].equals("")){						jm[i].addSeparator();			//如果为空增加分割符					}else{										jmi[i][j] = new JMenuItem(jmil[i][j]);						jm[i].add(jmi[i][j]);					}				}				jmb.add(jm[i]);			}			jf.setJMenuBar(jmb);			jf.setSize(200,100);			jf.setVisible(true);			jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		}	public static void main(String[] args) {		new TestMenu();	}}-----------------------------------------------------------------------------------------	package com.tarena.day10.gui;import javax.swing.*;public class GuiUtil {			public static JMenuBar getMenuBar(	String[] jml,String[][] jmil){				JMenuBar jmb = new JMenuBar();				JMenu[] jm = new JMenu[jml.length];				JMenuItem[][] jmi = new JMenuItem[jmil.length][];				for (int i = 0; i < jml.length; i++) {					jm[i] = new JMenu(jml[i]);					jmi[i] = new JMenuItem[jmil[i].length];					for (int j = 0; j < jmil[i].length; j++) {						if(jmil[i][j].equals("")){							jm[i].addSeparator();						}else{													jmi[i][j] = new JMenuItem(jmil[i][j]);							jm[i].add(jmi[i][j]);						}					}					jmb.add(jm[i]);				}				return jmb;			}			public static void main(String[] args){				JFrame jf = new JFrame("TestMenu");				String[] jml = {"File","Edit","Help"};				String[][] jmil = {{"New","Open","Save","Save as","","Exit"},{"ed1","ed2","ed3","","ed4"},{"h1","h2"}};				JMenuBar jmb = GuiUtil.getMenuBar(jml, jmil);				jf.setJMenuBar(jmb);				jf.setSize(200,100);				jf.setVisible(true);				jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			}}-----------------------------------------------------------------------------------------适配器类:	当监听接口方法比较多的时候,就可以写个适配器类作为接口的子类,可以继承这个适配器类并重写其中一个或多个方法,不用强制重写所有方法:-----------------------------------------------------------------------------------------package com.tarena.day10.gui;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import javax.swing.JFrame;public class TestWindowListener1 implements WindowListener{	public static void main(String[] args){		JFrame jf = new JFrame();		jf.setSize(300,100);		jf.setVisible(true);		jf.addWindowListener(new TestWindowListener1());	}	public void windowActivated(WindowEvent e) {	}	public void windowClosed(WindowEvent e) {		}	public void windowClosing(WindowEvent e) {		System.out.println("window close");		System.exit(0);		//非正常退出		}	public void windowDeactivated(WindowEvent e) {		}	public void windowDeiconified(WindowEvent e) {	}	public void windowIconified(WindowEvent e) {	}	public void windowOpened(WindowEvent e) {	}}-----------------------------------------------------------------------------------------用适配器类重写其中的一个方法,中间使用匿名内部类:-----------------------------------------------------------------------------------------package com.tarena.day10.gui;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;public class TestWindowListener2 {	public static void main(String[] args) {		JFrame jf = new JFrame();		jf.setSize(300,100);		jf.setVisible(true);		jf.addWindowListener(new TestWindowListener1());		jf.addWindowListener(new WindowAdapter(){});		//匿名内部类	}	public void windowClosing(WindowEvent e) {		System.out.println("window close");		System.exit(0);		//非正常退出		}}-----------------------------------------------------------------------------------------作业:写一个菜单栏,要有文件:新建/打开/保存/另存/分割线/退出编辑:撤销/剪切/复制/粘贴/删除/查找/替换/全选帮助:关于记事本除了打开/保存/另存/新建,其他的都可以做了

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -