import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import com.geowind.controller.Controller;
public class MainUI implements ActionListener{
//表格包布局约束
private GridBagConstraints c = null;
String[][] names = {
{ "MC", "MR", "MS", "M+", "M-" },
{ "←", "CE", "C", "±", "√" },
{ "7", "8", "9", "/", "%" },
{ "4", "5", "6", "*", "1/x" },
{ "1", "2", "3", "-", "=" },
{ "0", "", ".", "+","" }
};
private JTextField field;
//窗体
private JFrame frame;
public MainUI() {
// 创建约束
c = new GridBagConstraints();
c.insets= new Insets(5, 5, 5, 5);//表格的间隔
c.fill = GridBagConstraints.BOTH;//表格的拉伸为横纵向都拉伸
// 创建窗体
frame = new JFrame("计算器");
// 设置此窗体的布局为网格包布局
frame.setLayout(new GridBagLayout());
//输入框
field = new JTextField();
field.setText("0 ");//设置输入框初始值为0
field.setEditable(false);//设置输入框不可编辑
field.setBackground(Color.white);//设置输入框的背景色
field.setPreferredSize(new Dimension(0, 50));//设置输入框的大小
field.setHorizontalAlignment(JTextField.RIGHT);//设置文本右边对齐
field.setFont(new Font("宋体", Font.BOLD, 20));//设置字体
//将输入框添加到第零个位置
addComponent(field, 0, 0, 5, 1);
//添加按钮
for (int row = 1; row < 7; row++) {
for (int col = 0; col < 5; col++) {
JButton btn = new JButton(names[row - 1][col]);
btn.addActionListener(this);
//调整按钮大小
btn.setPreferredSize(new Dimension(40, 30));
//设置按钮边框和按钮中文本的间距
btn.setMargin(new Insets(0, 0, 0, 0));
//设置按钮的颜色
btn.setBackground(new Color(231, 249, 209));
//为按钮指定样式
if (row == 5 && col == 4) {
addComponent(btn, col, row, 1, 2);
} else if (row == 6 && col == 0) {
addComponent(btn, col, row, 2, 1);
} else if(!((row == 6 && col == 4) || (row == 6 && col == 1))){
//当不为(6, 1)和(6, 4)位置的按钮时
addComponent(btn, col, row, 1, 1);
}
}
}
// 设置窗体的属性
frame.pack();//根据组件调整窗体大小
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);//居中
frame.setVisible(true);
}
/**
* 根据指定约束添加按钮
*
* @param btn
* 按钮
* @param c
* 约束
*/
public void addComponent(Component com, int gridx, int gridy,
int gridwidth, int gridheight) {
c.gridx = gridx;
c.gridy = gridy;
c.gridwidth = gridwidth;
c.gridheight = gridheight;
frame.add(com, c);
}
public static void main(String[] args) {
MainUI g = new MainUI();
}
@Override
public void actionPerformed(ActionEvent e) {
//获取响应的按钮
JButton btn = (JButton)e.getSource();
//拿到按钮上的文本
String text = btn.getText();
//输入框中的表达式
String oldText = field.getText();
if("=".equals(text)){
Controller c = new Controller();
double result = c.getResult(c.toPostExpression(oldText));
field.setText(result+"");
}else{
field.setText(oldText + text);
}
}
}
<img src="https://img-blog.csdn.net/20150225133649871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2lsZW5jZTIwMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
用GridBagConstraints做的UI布局明显好看的多
</pre><pre name="code" class="java">
</pre><pre name="code" class="java">
</pre><pre name="code" class="java">