import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
class TrayTest extends Menuse1 {
private Image icon;// 托盘图标
private TrayIcon trayIcon;
private SystemTray systemTray;// 系统托盘
private PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
private MenuItem exit = new MenuItem("退出程序");
private MenuItem show = new MenuItem("显示窗口");
public TrayTest() {
// 托盘图标部分结束
// icon初始化
icon = Toolkit.getDefaultToolkit().getImage(
this.getClass().getResource("icon.gif"));// 托盘图标显示的图片
if (SystemTray.isSupported()) {
systemTray = SystemTray.getSystemTray();// 获得系统托盘的实例
trayIcon = new TrayIcon(icon, "微型计算器", pop);
pop.add(show);
pop.add(exit);
try {
systemTray.add(trayIcon); // 设置托盘的图标
} catch (AWTException e1) {
e1.printStackTrace();
}
addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
dispose();// 窗口最小化时dispose该窗口
}
});
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2
&& e.getButton() != MouseEvent.BUTTON3) {// 左击击托盘窗口再现
setVisible(true);
setExtendedState(JFrame.NORMAL);// 设置此 frame 的状态。
}
}
});
show.addActionListener(new ActionListener() { // 点击"显示窗口"菜单后将窗口显示出来
public void actionPerformed(ActionEvent e) {
systemTray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
setVisible(true); // 显示窗口
setExtendedState(JFrame.NORMAL);
}
});
exit.addActionListener(new ActionListener() { // 点击“退出演示”菜单后推出程序
public void actionPerformed(ActionEvent e) {
// 这里可以写执行退出时执行的操作
System.exit(0); // 退出程序
}
});
}// 托盘图标部分结束
setIconImage(icon);// 更改程序图标
}
}
class Menuse1 extends Calculator2 {
public static void setFeel() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
public Menuse1() {
// setFeel();
JMenuBar jmb = new JMenuBar();
this.setJMenuBar(jmb);
JMenu[] jmu = { new JMenu("查看"), new JMenu("编辑"), new JMenu("帮助") };
final JMenuItem[][] mi = {
{ new JMenuItem("标准型"), new JMenuItem("科学型") },
{ new JMenuItem("复制"), new JMenuItem("粘贴") },
{ new JMenuItem("查看帮助"), new JMenuItem("关于我们") } };
for (int i = 0; i < jmu.length; i++) {
jmb.add(jmu[i]);
for (int j = 0; j < mi.length - 1; j++) {
jmu[i].add(mi[i][j]);
mi[i][j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem b = (JMenuItem) e.getSource();
if (b == mi[0][0]) {
JOptionPane.showMessageDialog(null,
"当前窗口即为标准型,返回请点击确定", "标准型",
JOptionPane.WARNING_MESSAGE);
} else if (b == mi[0][1]) {
JOptionPane.showMessageDialog(null,
"科学型正在开发中,返回请点击确定", "科学型",
JOptionPane.INFORMATION_MESSAGE);
} else if (b == mi[1][0]) {
JOptionPane.showMessageDialog(null,
"复制正在开发中,返回请点击确定", "复制",
JOptionPane.INFORMATION_MESSAGE);
} else if (b == mi[1][1]) {
JOptionPane.showMessageDialog(null,
"粘贴正在开发中,返回请点击确定", "粘贴",
JOptionPane.INFORMATION_MESSAGE);
} else if (b == mi[2][0]) {
JOptionPane
.showMessageDialog(
null,
"这是一个简单的计算器,不支持键盘输入,\n计算请单击确定后,用鼠标单击软键盘进行。",
"查看帮助",
JOptionPane.INFORMATION_MESSAGE);
} else if (b == mi[2][1]) {
JOptionPane.showMessageDialog(null, "版权归天津商业大学所有 "
+ "\n" + " 侵权必究", "关于我们",
JOptionPane.WARNING_MESSAGE);
}
}
});
}
}
for (int i = 0; i < jmu.length; i++) {
jmu[i].insertSeparator(1);
}
}
}
public class Calculator2 extends JFrame implements ActionListener {
private String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
// 计算器上按键的显示名
private String[] COMMAND = { "Backspace", "CE", "C" };
// 计算器上功能键的显示名
private String[] M = { " ", "MC", "MR", "MS", "M+" };
// 计算器左边的M的显示名
private JButton keys[] = new JButton[KEYS.length];
// 计算器上按键的按钮
private JButton command[] = new JButton[COMMAND.length];
// 计算器上功能键的按钮
private JButton m[] = new JButton[M.length];
// 计算器左边M的按钮
private JTextField caltext = new JTextField("0");
// 计算结果文本框
private boolean firstDigit = true;
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private double resultNum = 0.0;
// 计算的中间结果
private String operator = "=";
// 当前运算的运算符
private boolean operateValidFlag = true; // 操作是否合法
public Calculator2() {
super();
init(); // 初始化计算器
this.setBackground(Color.lightGray); // 设置计算器的背景颜色
this.setTitle("计算器");
this.setLocation(500, 300);// 在屏幕(500,300)坐标处显示计算器
this.setResizable(false);// 不许修改计算器的大小
this.setSize(400, 233);// 设置JFrame的大小
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void init() {
caltext.setHorizontalAlignment(JTextField.RIGHT);
caltext.setEditable(false);
caltext.setBackground(Color.white);
JPanel keypanel = new JPanel();
keypanel.setLayout(new GridLayout(4, 5, 4, 3));
for (int i = 0; i < KEYS.length; i++) {
keys[i] = new JButton(KEYS[i]);
keypanel.add(keys[i]);
keys[i].setForeground(Color.blue);
}
keys[3].setForeground(Color.red);
keys[8].setForeground(Color.red);
keys[13].setForeground(Color.red);
keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
JPanel commandPanel = new JPanel();// 初始化功能键,都用红色标示.将功能键放在一个画板内
commandPanel.setLayout(new GridLayout(1, 3, 3, 3));// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
for (int i = 0; i < COMMAND.length; i++) {
command[i] = new JButton(COMMAND[i]);
commandPanel.add(command[i]);
command[i].setForeground(Color.red);
}
JPanel calmsPanel = new JPanel();// 初始化M键,用红色标示,将M键放在一个画板内
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));// 用网格布局管理器,5行1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
for (int i = 0; i < M.length; i++) {
m[i] = new JButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(Color.red);
}
JPanel panel1 = new JPanel();// 新建一个大的画板,将上面建立的command和key画板放在该画板内
panel1.setLayout(new BorderLayout(3, 3));// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
panel1.add("North", commandPanel);
panel1.add("South", keypanel);
// 建立一个画板放文本框
JPanel top = new JPanel();
top.setLayout(new BorderLayout());
top.add("Center", caltext);
getContentPane().setLayout(new BorderLayout(3, 5));// 这儿写this 或者
// 不写都可以认为是正确的。
getContentPane().add("North", top);
getContentPane().add("Center", panel1);
getContentPane().add("West", calmsPanel);
// 为各按钮添加事件侦听器
// 都使用同一个事件侦听,即本对象.本类的声明中有implements ActionListener
for (int i = 0; i < KEYS.length; i++) {
keys[i].addActionListener(this);
}
for (int i = 0; i < COMMAND.length; i++) {
command[i].addActionListener(this);
}
for (int i = 0; i < M.length; i++) {
m[i].addActionListener(this);
}
}
public void actionPerformed(