`
GLC
  • 浏览: 110831 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

计算器与画图板简单总结

阅读更多

计算器和画图板的总结:
  1.两者的面板类都是继承JFrame类,运用了继承的关键字:extends



  2.两者的主函数都是通过先实例化对象再调用方法来实现目的。



  3.显示的界面都存储在调用方法里面,运用了关键字:this,它可直接简单表示所调用方法的主对象名。


  4.界面的设置都大致相同,通过添加各个对象而综合形成。在画图板中,添加了工具栏、画布栏、颜色选择栏以及菜单栏;在计算器中,只添加了菜单栏、文本输入框和按钮面板


  5.菜单栏的设置都是通过二维数组添加对象,其中需要注意:在添加子菜单栏选项时,应该是j<arrayItem[i].length;菜单栏的添加都是通过一边实例化对象一边添加。


  6.画图板的实现是通过调用同一工程名中不同包下的类来完成,而计算器则直接调用方法来实现的。


  7.选择按钮的添加都通过数组来实现,按钮上都添加了鼠标监听器:按钮对象名.addActionListener(al),而al为匿名内部类的对象名;通过添加匿名内部类来实现按钮上的命令。其格式是ActionListener al=new ActionListener(){其中添加一个方法};并分号结束


  8.计算器中运算的实现:先判断点击的是否为点击了数据后的运算符,如果是,则进行再一次判断是否是第一次点击,当是第一次点击运算符时、不进行运算只进行直接存储:value1=文本输入框中的值;value2=当前点击的运算符;并把表示是否点击了运算符state=false;当不是第一次点击运算符时,进行运算,其 先判断上一运算符为何运算符,再进行相应运算:把文本框中的值赋给value3,然后再进行相应运算,但要使用Double,使其字符型转化成数据类型;然后把当前点击的运算符赋给value2,把所得到的结果存储到value1中,再把表示是否点击了运算符state=false;
如果判断点击的是数字,则进行数据存储,进行数据存储前,先判断点击前是否点击当前的数据,如果state为真,则表示点击了当前数据的数字,应该是jtf.Text(jtf.Text()+command+"")如果state为假,这表示还没点击当前数据的数字,表示为jtf.Text(command+"");并且state=true;
判断是否连续点击了运算符,则用if(command=="+"或-或*或/或=的运算符)如果是,则把当前点击的运算符赋给value2。



  9.画图板的实现:先建立一个主版块drawingBorder类,类中添加了主函数;在该类里实例化一个对象,再调用方法。在方法中分别添加各个模块;工具栏模块Tools,颜色栏模块Color,画布板模块DrawingPanel;再在同一包下建立相应的类名,分别实例化对象和添加动作命令,并对按钮添加监听器方法;为实现方法,在另一包下建立画图动作类,接收鼠标动作,并实现各种画图要求。

画图板:
     package UI;

import java.awt.BorderLayout;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import Tools.DrawingListener;

//建立一个简单画图板界面,其继承JFrame类
public class DrawingBorder extends JFrame {

	public static void main(String[] args) {
		// 实例化一个对象
		DrawingBorder db = new DrawingBorder();
		// 对象调用方法
		db.init();
	}

	// 定义一个init方法
	public void init() {
		// 设置界面
		this.setTitle("简单画板");
		this.setSize(500, 600);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);

		// 实例化一个菜单栏
		JMenuBar jmb = initJMenuBar();
		// 设置菜单栏的属性
		this.setJMenuBar(jmb);

		// 实例化一个工具栏对象
		ToolsPanel tp = new ToolsPanel();
		this.add(tp, BorderLayout.WEST);

		// 实例化一个颜色栏对象
		ColorPanel cp = new ColorPanel();
		this.add(cp, BorderLayout.SOUTH);

		// 实例化一个画布对象
		DrawingPanel dp = new DrawingPanel();
		this.add(dp, BorderLayout.CENTER);

		// 设置窗体可见
		this.setVisible(true);

		// 获取画布上的画图对象
		Graphics g = dp.getGraphics();
		// 实例化一个监听器对象,并添加所需对象
		DrawingListener dl = new DrawingListener(tp, cp,dp, g);
		// 将鼠标监听器添加到动作框上
		dp.addMouseListener(dl);
		// 将鼠标添加鼠标拖动监听器方法,并绑定事件处理类对象
		dp.addMouseMotionListener(dl);

	}

	// 设置一个菜单栏,其菜单栏JMenuBar,菜单JMenu,菜单子选项JMenuItem
	public JMenuBar initJMenuBar() {
		// 实例化一个JMenuBar对象
		JMenuBar jmb = new JMenuBar();
		// 创建一个JMenuBar数组
		String[] array = { "文件", "颜色", "帮助" };
		// 创建菜单栏的子选项
		String[][] arrayMenu = { { "新建", "保存", "退出", "打开" }, { "编辑颜色" },
				{ "帮助选项", "颜色 选择" } };
		// 利用二维数组给菜单栏添加菜单栏选项
		for (int i = 0; i < array.length; i++) {
			// 实例化一个菜单栏选项,并添加名字
			JMenu jm = new JMenu(array[i]);
			// 再利用循环添加子选项
			for (int j = 0; j < arrayMenu[i].length; j++) {
				// 实例化子选项,并添加名字
				JMenuItem jmi = new JMenuItem(arrayMenu[i][j]);
				// 添加到上层菜单栏上
				jm.add(jmi);
			}
			// 将jm对象添加到上层菜单对象上
			jmb.add(jm);

		}
		// 返回对象
		return jmb;

	}

}
package UI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

//设置颜色类,其继承JPanel类
public class ColorPanel extends JPanel {
	//定义颜色属性
	private Color color=Color.black;
	//获取颜色属性
	public Color getColor(){
		return color;
	}
	//面板颜色的构造方法
	public ColorPanel(){
		//实例化一个面板,
		JPanel panel=new JPanel();
		//设置面板大小
		panel.setLayout(new GridLayout(2,4,4,4));
		//实例化一个颜色数组
		Color[] array={Color.BLACK,Color.BLUE,Color.RED,Color.GREEN,Color.ORANGE,new Color(20,50,90),new Color(100,100,100),new Color(20,80,30)};
		//使用匿名内部类来实现方法
		ActionListener al=new ActionListener(){
			
			public void actionPerformed(ActionEvent e) {
				//获取事件源对象
				JButton btn=(JButton)e.getSource();
				//获取用户选择的颜色
				color=btn.getBackground();
				//输出
				System.out.println("你选择了"+color+"颜色");
				
			    }
		};
		//循环生成按钮
		for(int i=0;i<array.length;i++){
			//先实例化生成按钮对象,再添加颜色名字
			JButton jbt=new JButton();
			jbt.setBackground(array[i]);
			//设置按钮大小
			jbt.setSize(new Dimension(20,20));
			//将按钮添加到鼠标监听器上
			jbt.addActionListener(al);
			//将按钮添加到面板上
			panel.add(jbt);
			
		}
		//设置面板颜色布局为流式布局
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		//添加到颜色板框上
		this.add(panel);
	}

}


import java.awt.Color;

import javax.swing.JPanel;

//定义一个画布类,其继承JPanel类
public class DrawingPanel extends JPanel {
	//构造方法
	public DrawingPanel(){
		this.setBackground(Color.WHITE);
	}

}
package UI;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;

//创建一个工具栏类,其继承JPanel的类
public class ToolsPanel extends JPanel {
	// 定义一个获取图形的属性
	private String type;

	// 获取图形属性
	public String getType() {

		return type;
	}

	// 实例化工具栏方法
	public ToolsPanel() {
		// 实例化工具栏对象
		JPanel panel = new JPanel();
		// 设置panel的布局为网格布局
		panel.setLayout(new GridLayout(5, 2, 4, 4));
		// 定义一个字符数组
		String[] array = { "images/line.jpg", "images/rect.jpg",
				"images/colorpicked.jpg", "images/pencil.jpg",
				"images/sparygun.jpg", "images/eraser.jpg",
				"images/brush.jpg", "images/polygon.jpg",
				"images/round.jpg", "images/roundrect.jpg" };
		
		// 使用匿名内部类来实现颜色按钮的监听处理,加{}就表示有了具体的实现
		ActionListener al = new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// 实现动作上的按钮
				type = e.getActionCommand();
				// 输出值
				System.out.println("你选择了" + type + "工具");
			}

		};
		// 循环生成按钮
		for (int i = 0; i < array.length; i++) {
			// 先实例化一个图标对象,并添加图标
			ImageIcon imc = new ImageIcon(array[i]);
		
			// 实例化一个按钮对象,并添加上步的对象
			JButton jbt = new JButton(imc);
			// 设置按钮的大小
			jbt.setPreferredSize(new Dimension(30, 30));
			// 获取动作命令的按钮值
			String value = array[i].substring(array[i].indexOf("/") + 1,
					array[i].lastIndexOf(".jpg"));
			// 给按钮设置动作命令
			jbt.setActionCommand(value);
			// 给按钮添加监听器方法
			jbt.addActionListener(al);
			// 将按钮添加到窗体上
			panel.add(jbt);
		}
		// 将其添加到工具栏上
		this.add(panel);
	}

}



  • 大小: 66 KB
  • 大小: 12.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics