import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.MemoryImageSource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Stack;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.plaf.metal.MetalLookAndFeel;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
//主要框架开始:
public abstract class CalculatorFrame01 extends JFrame implements ActionListener, MouseListener{
//help窗口
class HelpFrame extends JFrame {
private static final long serialVersionUID = 5659419268287608878L;
private Color bkgd=new Color(0,32,68);
public HelpFrame(){
super("Help contents");
setSize(300,300);
setLocation(400,150);
setResizable(false);
setIconImage(icon);
}
public void paint(Graphics g){
g.setColor(bkgd);
g.fillRect(0, 0, 300, 300);
g.setColor(Color.white);
g.drawString("该版本采用的角度制是弧度",10, 60);
g.drawString("圆周率 PI = 3.141592653589793(直接输入PI即可)",10, 100);
g.drawString("自然对数 e = 2.718281828459045(直接输入e即可)",10, 140);
g.drawString("有任何疑问和建议请发至邮箱 talent-001@163.com", 10, 180);
g.drawString("衷心感谢", 130, 220);
g.drawString("By T", 240, 270);
}
}
//about窗口
class AboutFrame extends JFrame {
private static final long serialVersionUID = 5659419268287608877L;
public AboutFrame(){
super("About T's Calculator");
setSize(300,300);
setLocation(400,150);
setResizable(false);
setIconImage(icon);
}
public void paint(Graphics g){
g.setColor(Color.white);
g.drawImage(icon,0,10,300,300,null);
g.drawString("Author T", 200, 60);
g.drawString("E-mail talent-001@163.com",130, 100);
g.drawString("CreateTime 2009.4.23",150, 140);
g.drawString("Advised by ZzxBarry",160, 180);
g.drawString("Acknowledge Java2学习指南 Eclipse Ganymede",20, 240);
g.setColor(Color.gray);
g.drawString("ClassName CalculatorFrame01",110, 280);
}
}
private static final long serialVersionUID = 2087528703614679038L;
//
//
//
//==============================================================================
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//==============================================================================
//上半部分:界面实现
//
//
//==================================================================
//成员--数据域
//文件操作
private FileDialog filedialog = new FileDialog(this,"File");
//主要背景色
private Color backgroundColor = new Color(230,238,238);
//光标位置
private int caretDot;
//结果储存
private String answer="";
//输入,输出区域
public JTextField input = new JTextField(28);
public JTextArea output = new JTextArea(6,33);
//输出区域的滚动窗格
private JScrollPane outPane =new JScrollPane(output);
//窗口容器
private Container mainPane=this.getContentPane();
//右键弹出菜单
private JPopupMenu popupMenu = new JPopupMenu();
//platform look and feel
private LookAndFeel plaf = UIManager.getLookAndFeel();
//图标
public Image icon;
//Help contents
public JFrame help;
//About T's Calculator
public JFrame about;
//计算器数据
//计算器引用,默认初始化为自身
public CalculatorFrame01 calculator1 = this;
//=====================================================================
//成员--构造器
//默认构造函数
public CalculatorFrame01(){
super("T Calculator");
setSize(400,380);
setLocation(350,100);
setResizable(false);
setLayout(new BorderLayout());
setMenuBar();
setDisplay();
setButton();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setIcon();
mainPane.setLayout(new BorderLayout());
mainPane.setBackground(backgroundColor);
help=new HelpFrame();
about=new AboutFrame();
}
//==================================================================
//成员--方法域
//生成并设置图标
private void setIcon(){
int i,j,k,red,green,blue,h=63,w=63;
int[] pixels=new int[w*h];
for(k=i=0;i<h;i++)
for(j=0;j<w;j++){
red=(i*1^j*1)&0xff;
green=(i*2^j*2)&0xff;
blue=(i*4^j*4)&0xff;
pixels[k++]=0xff000000|(red<<16)|(green<<8)|blue;
}
icon=createImage(new MemoryImageSource(w,h,pixels,0,w));
setIconImage(icon);
}
//定义并设置菜单栏
private void setMenuBar(){
//定义菜单系统
JMenuBar
menuBar=new JMenuBar();
JMenu
fileMenu = new JMenu("File",true),
editMenu = new JMenu("Edit",true),
helpMenu = new JMenu("Help",true);
JMenuItem
openMenuItem = new JMenuItem("Open",'o'),
inMenuItem = new JMenuItem("Save input",'i'),
outMenuItem = new JMenuItem("Save outcome",'s'),
copyMenuItem = new JMenuItem("Copy",'c'),
pasteMenuItem = new JMenuItem("Paste",'p'),
clearMenuItem = new JMenuItem("Clear outcome",'r'),
helpMenuItem = new JMenuItem("Help contents",'h'),
changeMenuItme = new JMenuItem("Change UI",'u'),
aboutMenuItem = new JMenuItem("About T's Calculator",'a'),
popupMenuItem = new JMenuItem("About T's Calculator"),
copyMenuItem1 = new JMenuItem("Copy",'c'),
pasteMenuItem1 = new JMenuItem("Paste",'p');
//设置菜单系统
fileMenu.setMnemonic('F');
editMenu.setMnemonic('E');
helpMenu.setMnemonic('H');
openMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
inMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_MASK));
outMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
copyMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
pasteMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
clearMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK));
helpMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
aboutMenuItem. setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
//设置监听器
//这三个是对鼠标右键进行监听
mainPane.addMouseListener(this);
input.addMouseListener(this);
output.addMouseListener(this);
//下面主要是点击监听
openMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
filedialog.setMode(FileDialog.LOAD);
filedialog.setVisible(true);
File fi = new File(filedialog.getDirectory()+filedialog.getFile());
byte[] b = new byte[ (int) fi.length()];
try {
new FileInputStream(fi).read(b);