
按照你的要求编写的JavaGUI程序如下:
import javaawtGridLayout;import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJPanel;
import javaxswingJTextField;
public class HH extends JFrame implements ActionListener{
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JTextField jtf=new JTextField(20);
JButton jb1=new JButton("显示");
JButton jb2=new JButton("清除");
HH(){
jb1addActionListener(this);
jb2addActionListener(this);
jp1setLayout(new GridLayout(2,1));
jp3add(jtf);
jp2add(jb1);jp2add(jb2);
jp1add(jp3);jp1add(jp2);
getContentPane()add(jp1);
setSize(300, 120);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(egetSource()==jb1){
jtfsetText("java程序设计");
}
if(egetSource()==jb2){
jtfsetText("");
}
}
public static void main(String[] args) {
new HH();
}
}
//c++下的计算器源代码
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream> //输入输出流
#define N 11 //表达式长度,以字符数组实现,有效位19个
//由于不会把数字与 *** 作符同时存入一个数组,所以有如下定义:
// -11 代表 (
// -12 代表 )
// -13 代表 +
// -14 代表 -
// -15 代表
// -16 代表 /
float a[N]={3,-13,-11,5,-15,4,-13,3,-14,6,-12};//表达式
int n=10; //表达式的实际长度,以全局变量形式
int p=0; //指向前括号,或表达式头部
int at=10; //指向后括号,或表达式尾部
int m=10; //扫描标志位
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//类定义
class calculate
{public:
void mov(int sign); //////运算后,或去括号后,表达式左移
void gover( ); //扫描函数扫扫描“()”,如果扫描到“()”就计算其中的值,
//没有扫到就直接进行计算表达式值
void jisuan(int &a,int &b); //主要的计算函数
};//类定义结束
//表达式为:3+(54+3-6)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//move 函数
void calculate::mov(int sign)
{
//出现了(1+5)这样的情况,要变成(6),注:是原先)的后继元素
for (int j=0;sign+j<=n-2;j++)
a[sign+j]= a[sign+j+2]; //元素依次前移
n-=2; //表长减2
at-=2; //指向后括的标志随着)前移
}//move结束
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//jisuan函数
void calculate::jisuan(int &at,int &p)
{
for (int i=at;p!=i ;i--) //乘法,除法运算
{
if (a[i]==-15000000)//出现乘法
{
a[i-1]=a[i-1]a[i+1];
mov(i);
} //if over
if (a[i]==-16000000) //出现除法
{a[i-1]=a[i-1]/a[i+1];
mov(i);
}// if over
} //for over //乘法,除法运算结束
for (int j=at;p!=j ;j--) //加减运算
{
if (a[j]==-13000000) //出现加法
{
a[j-1]=a[j-1]+a[j+1];
mov(j);
}// if over
if (a[j]==-14000000) //出现除法
{
a[j-1]=a[j-1]-a[j+1];
mov(j);
}//if over
}//for over加减运算结束
if (p!=0)
{if (p+2==at) //出现(5)的情况,就去括号
{
a[p]=a[p+1];
for (int j=0;p+j<=n-3;j++) //前移两个单位
a[p+j+1]= a[p+j+3]; //向前付值
n-=2; //表长减2
p=0; //去掉括号后指明针回到头尾
at=n; //去掉括号后,尾指
} // if (p+2==at) 结束
} //if (p!=0) 结束
m=n+1; //给M补1
}//jisuan完
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//扫描函数
void calculate::gover( )
{ //m用来指示下标变化,每次发生移位后,都要把新的n值付给m,即第次//移位后,要从尾开重新扫描
for ( ; m>=0; m-- )
{
if (a[m]==-12000000 ) //出现“)”
{
at=m; //用at标记住“)”的下标
}
if (a[m]==-11000000) //出现“(”
{p=m; //用p标记住“(”的下标,连续出现了(),计算()内的表达式值
jisuan(at,p) ;
}//if 完
}//扫描()结束
//如果没有()则直接调用jisuan( )
//把两个指针放回到表达式的首尾,
jisuan(at,p);
}//gover结束
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() //主调函数
{calculate example; //创建一个对象
examplegover( ); //对象调用gover
printf("%f",a[0]);//计算完毕,输出结果
return 0;
}
//改进目标:第一,实现用户输入运算表达式
// 第二,实现对表达式的正确性进行扫描
//第三,用Mfc把用户界面设计出来
//
//存在的问题:
//第一,参数传递中有很多不理解的东西
//第二,由于第一个原因p,at迫于无奈做成了全局的变量,因为全局变量过多
//第三,结构化程序不够高,没有把面向对象的思想最大的发挥出来
//针对以上三点,下一步努力改进
======================
还有一个:
# include <windowsh>
long WINAPI CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE phinst,
PSTR cmdline,int cmdshow)
{
//the application's name
static CHAR Appname[] = TEXT("HexCalc");
//---------------------------------------
HWND hwnd;
MSG msg;
// window class create
WNDCLASS wndclass;
wndclassstyle = CS_HREDRAW | CS_VREDRAW;
wndclasslpfnWndProc = WndProc;
wndclasscbClsExtra = 0;
wndclasscbWndExtra = DLGWINDOWEXTRA;
wndclasshInstance = hinst;
wndclasshIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclasshCursor = LoadCursor(NULL,IDC_ARROW);
wndclasshbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclasslpszMenuName = NULL;
wndclasslpszClassName = Appname;
//---------------------------------------
//create and show window
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),
Appname,MB_ICONHAND);
return 0;
}
hwnd = CreateDialog(hinst,Appname,0,NULL);
ShowWindow(hwnd,cmdshow);
UpdateWindow(hwnd);
//------------------------------------------------
//send message
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//------------------------------------------------
return msgwParam;
}
void ShowNumber(HWND hwnd,UINT iNumber)
{
char szBuffer[20];
wsprintf(szBuffer,TEXT("%X"),iNumber);
SetDlgItemText(hwnd,VK_ESCAPE,szBuffer);
}
DWORD Calclt(UINT iFirstNum,int iOperation,UINT iNum)
{
switch(iOperation)
{
case '=':
return iNum;
case '+':
return iFirstNum + iNum;
case '-':
return iFirstNum - iNum;
case '':
return iFirstNum iNum;
case '&':
return iFirstNum & iNum;
case '|':
return iFirstNum | iNum;
case '^':
return iFirstNum ^ iNum;
case '<':
return iFirstNum << iNum;
case '>':
return iFirstNum >> iNum;
case '/':
return iNum iFirstNum / iNum : MAXDWORD;
case '%':
return iNum iFirstNum % iNum : MAXDWORD;
default:
return 0;
}
}
long WINAPI CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static BOOL bNewNumber = TRUE;
static int iOperation = '=';
static UINT iNumber,iFirstNum;
HWND hButton;
//message list or procces
switch(message)
{
case WM_KEYDOWN:
if(wParam != VK_LEFT)
break;
wParam = VK_BACK;
case WM_CHAR:
if((wParam = (WPARAM)CharUpper((char)wParam)) == VK_RETURN)
wParam = '=';
if(hButton = GetDlgItem(hwnd,wParam))
{
SendMessage(hButton,BM_SETSTATE,1,0);
Sleep(100);
SendMessage(hButton,BM_SETSTATE,0,0);
}
else
{
MessageBeep(0);
break;
}
case WM_COMMAND:
SetFocus(hwnd);
if(LOWORD(wParam) == VK_BACK)
ShowNumber(hwnd,iNumber /= 16);
else if(LOWORD(wParam) == VK_ESCAPE)
ShowNumber(hwnd,iNumber = 0);
else if(isxdigit(LOWORD(wParam)))
{
if(bNewNumber)
{
iFirstNum = iNumber;
iNumber = 0;
}
bNewNumber = FALSE;
if(iNumber <= MAXDWORD >> 4)
ShowNumber(hwnd,iNumber = 16 iNumber + wParam -
(isdigit(wParam) '0' : 'A' - 10));
else
MessageBeep(0);
}
else
{
if(!bNewNumber)
ShowNumber(hwnd,iNumber = Calclt(iFirstNum,iOperation,iNumber));
bNewNumber = TRUE;
iOperation = LOWORD(wParam);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
//-----------------------------------------
return DefWindowProc(hwnd,message,wParam,lParam);
}
这是一个windows的GUI程序,关键的问题是运行环境不知道是不是对的。
如果是visual C++里面的GUI程序,入口函数并不是main(),这个是windows框架帮你做掉了。
windows的GUI入口函数是WinMain()
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
//创建模态对话框
/ 需要把整型转换成字符串类型 /
/ 没有父窗口 值为 NULL /
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MainDlgProc);
return 0;
}
然后调试的方法也不要用printf。
switch (uMsg)
{
// 对话框初始化消息
case WM_INITDIALOG:
// 此时对话框还没有显示 但是对话框已经创建好了
MessageBox(hWnd, L"初始化", L"提示", MB_OK);
// 设置对话框标题 [如果对话框没有设置好 不能给对话框设置标题]
SetWindowText(hWnd,L"这是一个对话框程序");
break;
}
可以直接用MessageBox可以d出消息框。
纯C的很少,windows32
sdk和linux的gtk是为数不多的2个库。
现代基本没有用C开发gui的,C++是更好的选择,像qt
mfc比win32好用得多。
开发效率更高的是python,tkinter
wxwidget
pyqt都很方便
以上就是关于求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳全部的内容,包括:求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳、急求一个计算器的源程序,要求:完整输入数学表达式(数字加减乘除括号)按=显示结果.JAVA或C++的都可以、C语言这里哪出错了,对话框出不来,加printf调试也输出不了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)