Swing is a GUI widget toolkit for Java.[1] It is part of Oracle’s Java Foundation Classes (JFC) – an API for providing a graphical user interface (GUI) for Java programs.
swing就是一个写界面的Java工具包,跟delphi很像,最近写了做了一点简单的东西,整理一下。
代码过几天再贴吧,免得professor在网上查重复,把我的assignment打成cheating。
计算器
最终结果:
1. 新建对象,所需要的container,button(数字和运算符),panel,textfield(设置为只读)
2. 添加容器到框架上,将panel添加到container,再将button,textfield加到panel上面。
3. 添加button,text field事件。
注意:JFrame用来做主页面框架也可以用来做顶级窗体,要想把控件放在该界面中,必须把控件放在JPanel中,然后再把JPanel放在JFrame中,JPanel作为一个容器使用。
Jpanel是一个静态控制组件,可以用来显示一行静态信息,不能接受用户的输入。它必须放在象JFrame这样的顶级窗口上才能输出。
JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel。
创建对象:
JTextField l = new JTextField(16);
JPanel p = new JPanel();
Container c = new Container();
Font f = new Font("Times",Font.BOLD,44); //显示计算结果的字体
Container c = getContentPane(); // JFrame 对象中不能直接添加 AWT 或者 Swing 组件,这里用getContentPane()方法获得JFrame的内容面板,再对其加入组件
//另一种JFrame添加组件的方式是建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中
添加控件
l.setFont(f); //添加字体格式
l.setEditable(false); //计算器显示结果应该是不可编辑的
c.add(BorderLayout.CENTER,p); //添加JPanel到container
c.add(l,BorderLayout.NORTH); //添加JTextField到JPanel
p.setLayout(new GridLayout(4,4,1,1)); //GridLayout(int rows, int cols, int hgap, int vgap)
//创建具有指定行数和列数的网格布局。
//rows - 该 rows 具有表示任意行数的值
//cols - 该 cols 具有表示任意列数的值
//hgap - 水平间距
//vgap - 垂直间距
for(int i=0;i<operand.length;i++) {
JButton b = new JButton(operand[i]+"");
b.addActionListener(new MyActionListener()); //添加监听事件
p.add(b);
}
添加事件
对于运算符运算,这里使用栈进行处理。首先将第一个输入数字进栈,然后判别第二个输入的运算符如果为“+”或者“-”,与下一个输入数字进行相应处理。
if(compute[i].equals("+")) {
stack.pop();
stack.push(Double.parseDouble(compute[i+1]));}
if(compute[i].equals("-"))
stack.push(-Double.parseDouble(compute[i+1]));
if(compute[i].equals("X")) {
Double re = stack.peek();
stack.pop();
stack.push(re*Double.parseDouble(compute[i+1]));
}
if(compute[i].equals("/")) {
double divider = Double.parseDouble(compute[i+1]);
Double re = stack.peek();
stack.pop();
stack.push(re/divider);
}
最后构建JFrame
my_cal cal = new my_cal(Color.BLACK,
Color.GREEN,400,400);