📄 buttonpanel.java
字号:
/**
* @(#)ButtonPanel.java
*
*
* @author
* @version 1.00 2007/5/12
*/
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ButtonPanel extends JPanel implements ActionListener {
private JTextArea jtaExpPanel;
private JButton jbtSin,jbtCos,jbtLn,jbtSqrt,jbtSqr,jbtPow,jbtBack,jbtFac,jbtStart,
jbtPlus,jbtSub,jbtMuti,jbtDiv,jbtEquals,jbtPoint,jbtLBracket,jbtRBracket,jbtLog;
private JButton[] jbtData = new JButton[16];
private String memory;
private String[] innerExpression = new String[10];
private String inter;//表示数字字符组成字符串的中间存储
private int count;
private JRadioButton jrbBinary;
private JRadioButton jrbOctal;
private JRadioButton jrbDecimal;
private JRadioButton jrbHex;
private JButton jbtStorage;
private JButton jbtHelp;
private JButton jbtRead;
private JTextArea jtaMemory;
private JScrollPane scrollPane;
private ButtonGroup group;
private final int JRB_BINARY = 1;
private final int JRB_OCTAL = 2;
private final int JRB_DECIMAL = 3;
private final int JRB_HEX = 4;
private int selection;
private String storeMemory;
private String[] storeInnerExpression;
private int storeCount;
private String storeInter;
//初始化界面
public ButtonPanel() {
//初始化字符串
storeCount = 0;
selection=JRB_DECIMAL;
inter="";
memory="";
count=0;
JPanel pUpper = new JPanel();
pUpper.setLayout(new BorderLayout());
//设置单选菜单
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(1,4));
jrbBinary = new JRadioButton("二进制");
jrbOctal = new JRadioButton("八进制");
jrbDecimal = new JRadioButton("十进制");
jrbHex = new JRadioButton("十六进制");
p1.add(jrbBinary);
p1.add(jrbOctal);
p1.add(jrbDecimal);
p1.add(jrbHex);
group = new ButtonGroup();
group.add(jrbBinary);
group.add(jrbOctal);
group.add(jrbDecimal);
group.add(jrbHex);
jrbDecimal.setSelected(true);
pUpper.add(p1,BorderLayout.SOUTH);
//设置存储菜单
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
p3.setLayout(new BorderLayout());
p2.setLayout(new GridLayout(3,1));
jbtHelp = new JButton("Help");
jbtStorage = new JButton("Storage");
jbtRead = new JButton("Read");
p2.add(jbtHelp);
p2.add(jbtStorage);
p2.add(jbtRead);
jtaMemory = new JTextArea("当前为十进制状态,亮色按钮为支持设备");
jtaMemory.setLineWrap(true);
jtaMemory.setWrapStyleWord(true);
jtaMemory.setEditable(false);
jtaMemory.setBorder(new BevelBorder(BevelBorder.RAISED,Color.BLACK,Color.BLACK));
jtaMemory.setFont(new Font("宋体",Font.BOLD,15));
jtaMemory.setForeground(Color.PINK);
scrollPane = new JScrollPane(jtaMemory);
p3.add(p2,BorderLayout.NORTH);
p3.add(scrollPane,BorderLayout.CENTER);
//设置显示界面
jtaExpPanel = new JTextArea();
jtaExpPanel.setLineWrap(true);
jtaExpPanel.setWrapStyleWord(true);
jtaExpPanel.setEditable(false);
jtaExpPanel.setBorder(new BevelBorder(BevelBorder.RAISED,Color.BLACK,Color.BLACK));
jtaExpPanel.setFont(new Font("宋体",Font.BOLD,20));
jtaExpPanel.setForeground(Color.BLUE);
pUpper.add(jtaExpPanel,BorderLayout.CENTER);
//设置按钮界面
JPanel pUnder = new JPanel();
pUnder.setLayout(new GridLayout(6,6,5,5));
jbtSin = new JButton("sin");
jbtCos = new JButton("cos");
jbtLn = new JButton("ln");
jbtSqrt = new JButton("sqrt");
jbtLBracket = new JButton("(");
jbtSqr = new JButton("sqr");
jbtPlus = new JButton("+");
jbtPow = new JButton("x^y");
jbtRBracket = new JButton(")");
jbtSub = new JButton("-");
jbtFac = new JButton("!");
jbtLog = new JButton("log");
jbtMuti = new JButton("*");
jbtBack = new JButton("Back");
jbtStart = new JButton("start");
jbtPoint = new JButton(".");
jbtEquals = new JButton("=");
jbtDiv = new JButton("/");
for (int i=0;i<10;i++)
jbtData[i]=new JButton(""+i);
jbtData[10] = new JButton("A");
jbtData[11] = new JButton("B");
jbtData[12] = new JButton("C");
jbtData[13] = new JButton("D");
jbtData[14] = new JButton("E");
jbtData[15] = new JButton("F");
for (int i=10;i<=15;i++)
jbtData[i].setBackground(Color.LIGHT_GRAY);
pUnder.add(jbtSin);
pUnder.add(jbtCos);
pUnder.add(jbtLn);
pUnder.add(jbtSqrt);
pUnder.add(jbtSqr);
pUnder.add(jbtLBracket);
pUnder.add(jbtData[7]);
pUnder.add(jbtData[8]);
pUnder.add(jbtData[9]);
pUnder.add(jbtPlus);
pUnder.add(jbtPow);
pUnder.add(jbtRBracket);
pUnder.add(jbtData[4]);
pUnder.add(jbtData[5]);
pUnder.add(jbtData[6]);
pUnder.add(jbtSub);
pUnder.add(jbtFac);
pUnder.add(jbtLog);
pUnder.add(jbtData[1]);
pUnder.add(jbtData[2]);
pUnder.add(jbtData[3]);
pUnder.add(jbtMuti);
pUnder.add(jbtBack);
pUnder.add(jbtStart);
pUnder.add(jbtData[0]);
pUnder.add(jbtPoint);
pUnder.add(jbtEquals);
pUnder.add(jbtDiv);
for (int i=10;i<16;i++)
pUnder.add(jbtData[i]);
//布置左边界面
JPanel jLeft = new JPanel();
jLeft.setLayout(new BorderLayout());
jLeft.add(pUpper,BorderLayout.CENTER);
jLeft.add(pUnder,BorderLayout.SOUTH);
jLeft.setBorder(new BevelBorder(BevelBorder.RAISED,Color.BLACK,Color.BLACK));
//总体布局
setLayout(new BorderLayout());
add(jLeft,BorderLayout.CENTER);
add(p3,BorderLayout.EAST);
//注册监听器
jbtHelp.addActionListener(this);
jbtStorage.addActionListener(this);
jbtRead.addActionListener(this);
jrbBinary.addActionListener(this);
jrbOctal.addActionListener(this);
jrbDecimal.addActionListener(this);
jrbHex.addActionListener(this);
jbtSin.addActionListener(this);
jbtCos.addActionListener(this);
jbtLn.addActionListener(this);
jbtSqrt.addActionListener(this);
jbtSqr.addActionListener(this);
jbtData[7].addActionListener(this);
jbtData[8].addActionListener(this);
jbtData[9].addActionListener(this);
jbtPlus.addActionListener(this);
jbtPow.addActionListener(this);
jbtData[4].addActionListener(this);
jbtData[5].addActionListener(this);
jbtData[6].addActionListener(this);
jbtSub.addActionListener(this);
jbtFac.addActionListener(this);
jbtData[1].addActionListener(this);
jbtData[2].addActionListener(this);
jbtData[3].addActionListener(this);
jbtMuti.addActionListener(this);
jbtBack.addActionListener(this);
jbtData[0].addActionListener(this);
jbtPoint.addActionListener(this);
jbtEquals.addActionListener(this);
jbtDiv.addActionListener(this);
jbtStart.addActionListener(this);
jbtLBracket.addActionListener(this);
jbtRBracket.addActionListener(this);
jbtLog.addActionListener(this);
for (int i=10;i<16;i++)
jbtData[i].addActionListener(this);
}
//处理器对各个按纽的操作
public void actionPerformed(ActionEvent e){
if (e.getSource()==jbtSin&&jrbDecimal.isSelected()){
if (inter!=""){
if (jrbBinary.isSelected())
inter = new DataStringDeal().BinaryToDecimalString(inter);
if (jrbOctal.isSelected())
inter = new DataStringDeal().OctalToDecimalString(inter);
if (jrbHex.isSelected())
inter = new DataStringDeal().HexToDecimalString(inter);
innerExpression[count]=inter;
count++;
if (count>=innerExpression.length){
String[] temp = new String[count*2];
for (int i=0;i<innerExpression.length;i++)
temp[i]=innerExpression[i];
innerExpression=temp;
}
inter="";
}
memory = memory+"sin";
innerExpression[count]="sin";
count++;
if (count>=innerExpression.length){
String[] temp = new String[count*2];
for (int i=0;i<innerExpression.length;i++)
temp[i]=innerExpression[i];
innerExpression=temp;
}
jtaExpPanel.setText(memory);
}
if (e.getSource()==jbtCos&&jrbDecimal.isSelected()){
//为前面打进的数字组成的字符串进行存储,并将INTER变量清零
//以便下一个数字字符串的存储
if (inter!=""){
if (jrbBinary.isSelected())
inter = new DataStringDeal().BinaryToDecimalString(inter);
if (jrbOctal.isSelected())
inter = new DataStringDeal().OctalToDecimalString(inter);
if (jrbHex.isSelected())
inter = new DataStringDeal().HexToDecimalString(inter);
innerExpression[count]=inter;
count++;
if (count>=innerExpression.length){
String[] temp = new String[count*2];
for (int i=0;i<innerExpression.length;i++)
temp[i]=innerExpression[i];
innerExpression=temp;
}
inter="";
}
memory=memory+"cos";
innerExpression[count]="cos";
count++;
if (count>=innerExpression.length){
String[] temp = new String[count*2];
for (int i=0;i<innerExpression.length;i++)
temp[i]=innerExpression[i];
innerExpression=temp;
}
jtaExpPanel.setText(memory);
}
if (e.getSource()==jbtLn&&jrbDecimal.isSelected()){
//为前面打进的数字组成的字符串进行存储,并将INTER变量清零
//以便下一个数字字符串的存储
if (inter!=""){
if (jrbBinary.isSelected())
inter = new DataStringDeal().BinaryToDecimalString(inter);
if (jrbOctal.isSelected())
inter = new DataStringDeal().OctalToDecimalString(inter);
if (jrbHex.isSelected())
inter = new DataStringDeal().HexToDecimalString(inter);
innerExpression[count]=inter;
count++;
if (count>=innerExpression.length){
String[] temp = new String[count*2];
for (int i=0;i<innerExpression.length;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -