/**
*
* 实现了系统计算器连续按"="和按"+","-","*","/"进行累记运算的模式
*
* */
import javax.swing.*
import java.awt.*
import java.awt.event.*
public class CalculatorFrame extends JFrame {
private JTextField txtDis = new JTextField("0", 16)//显示文本框
private JButton[] btnGrp = new JButton[17]//17个按钮
private JPanel jpnMain = new JPanel()//主面板
private JPanel jpnNorth = new JPanel()//上面板
private JPanel jpnSouth = new JPanel()//下面板
private double numSaved//保存的前一个数
private String operator = ""//保存的运算符号
private String lastPress = ""//上一次按的按钮("数字","运算符" 或 "等号")
/*构造函数*/
public CalculatorFrame() {
//窗口设置
setTitle("计算器")
setSize(210, 250)
buttonInit()//按钮初始化
//主面板设置
add(jpnMain)
jpnMain.setLayout(null)
jpnMain.add(jpnNorth)
jpnMain.add(jpnSouth)
jpnMain.add(btnGrp[15])
btnGrp[15].setBounds(8, 180, 188, 30)//添加“=”按钮
//上面板设置
jpnNorth.setBounds(8, 10, 190, 30)
jpnNorth.add(txtDis)
txtDis.setHorizontalAlignment(JTextField.RIGHT)//设置文本右对齐
txtDis.setEditable(false)
//下面板设置
jpnSouth.setBounds(8, 60, 190, 120)
jpnSouth.setLayout(new GridLayout(4, 4))
addSouthJpn()//添加17个按钮
//添加监听器
addListener()
}
/*17个按钮显示值初始化*/
public void buttonInit() {
for (int i = 0i <10i++) {
btnGrp[i] = new JButton("" + i)
}
btnGrp[10] = new JButton(".")
btnGrp[11] = new JButton("+")
btnGrp[12] = new JButton("-")
btnGrp[13] = new JButton("*")
btnGrp[14] = new JButton("/")
btnGrp[15] = new JButton("=")
btnGrp[16] = new JButton("C")
for (int i = 0i <17i++) {
btnGrp[i].setFont(new Font("Dialog", Font.PLAIN, 18))
}
}
/*按网格顺序添加除“=”外16个按钮*/
public void addSouthJpn() {
int[] index={7,8,9,14,4,5,6,13,1,2,3,12,0,16,10,11}
for(int i=0i<index.lengthi++){
jpnSouth.add(btnGrp[index[i]])
}
}
/*给按钮添加监听器*/
public void addListener() {
//给数字按钮添加监听器,btnGrp[10]是"."号
for (int i = 0i <= 10i++) {
btnGrp[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String button = ( (JButton) e.getSource()).getText()
//如果有运算 *** 作符或文本框数字为0并且按钮不为“。”
if (lastPress == "运算符" || lastPress == "等号"
|| txtDis.getText().equals("0") &&button != ".") {
txtDis.setText("")//清空文本框
}
if (lastPress == "等号") {
operator = ""//上次按的是=号,这次按数字,清空运算符
}
if (button == "." &&txtDis.getText().indexOf(".") != -1) {
} //这次按的是.文本框内已经包含.这种情况什么都不做,防止.重复
else {
txtDis.setText(txtDis.getText() + button)//文本框添加内容
}
lastPress = "数字"
}
})
}
//给运算 *** 作符按钮添加监听器
for (int i = 11i <= 14i++) {
btnGrp[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (operator != "" &&lastPress == "数字") { //运算符不为空并且之前按的是数字
(btnGrp[15].getActionListeners())[0].actionPerformed(e)//手动调用=号的监听响应实现=号功能
}
numSaved = Double.parseDouble(txtDis.getText())//保存当前文本框的数字
operator = ( (JButton) e.getSource()).getText()//保存运算 *** 作符
lastPress = "运算符"//添加运算符标记,下次文本框清空
}
})
}
//给等号按钮添加监听器
btnGrp[15].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double numNow = Double.parseDouble(txtDis.getText())//当前文本框的数字
//运算符匹配 *** 作
if (operator.equals("+")) {
txtDis.setText( (numSaved + numNow) + "")
}
else if (operator.equals("-")) {
if (lastPress == "等号") { //累记运算时的算法(一直按等号)
txtDis.setText( (numNow - numSaved) + "")
}
else {
txtDis.setText( (numSaved - numNow) + "")
}
}
else if (operator.equals("*")) {
txtDis.setText( (numSaved * numNow) + "")
}
else if (operator.equals("/")) {
if (lastPress == "等号") { //累记运算时的算法(一直按等号)
txtDis.setText( (numNow / numSaved) + "")
}
else {
txtDis.setText( (numSaved / numNow) + "")
}
}
if (lastPress != "等号") { //是第一次,以后按累记运算
numSaved = numNow//保存数改为后一个数
}
lastPress = "等号"//添加运算符标记,下次文本框清空
}
})
//给复位符“C”按钮添加监听器
btnGrp[16].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txtDis.setText("0")
numSaved = 0
operator = ""
lastPress = ""
}
})
}
}
=====================第二个类=============================
import javax.swing.*
public class Test {
public Test() {
CalculatorFrame calframe = new CalculatorFrame()//新窗口
calframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//设置关闭
calframe.setLocationRelativeTo(null)//窗口置中
calframe.setVisible(true)//显示窗口
calframe.setDefaultLookAndFeelDecorated(false)//使用windows视感
calframe.setResizable(false)//窗口不可调大小
}
public static void main(String[] args) {
Test test = new Test()
}
}
windows下创建一个基于GUI的窗口程序很简单,使用MFC或者Win32 API都可以实现。本文简单整理下windows API创建GUI应用程序的基本编码框架。比较常见的窗口包括:桌面窗口、应用程序窗口、对话框及控件。从编程的角度而言,创建GUI应用程序需要提供入口函数WinMain的实现,其定义格式如下:
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)