1 public class MainFrame extends JFrame {
2
3 /**
4 * 文本框
5 */
6 private TextField[] texts = new TextField[5];
7
8 /**
9 * 标签
10 */
11 private JLabel[] labels = new JLabel[5];
12
13 /**
14 * 标签值
15 */
16 private String[] labelTexts = {"存入本金:","年利率(%):","存入年限:","年复利次数:","复利终值:"};
17
18 /**
19 * 确定按钮
20 */
21 private JButton jbtOk = new JButton("确定");
22
23 /**
24 * 退出按钮
25 */
26 private JButton jbtExit = new JButton("退出");
27
28 /**
29 * 利率获取时间的整数倍
30 */
31 private double N;
32
33 /**
34 * 复利终值
35 */
36 private double F;
37
38 /**
39 * 存入年限
40 */
41 private double Y;
42
43 /**
44 * 本金
45 */
46 private double P;
47
48 /**
49 * 利率
50 */
51 private double R;
52
53 /**
54 * 本金计算方式
55 */
56 private boolean pFlag;
57
58 /**
59 * 复利计算方式
60 */
61 private boolean fFlag;
62
63 /**
64 * 主窗体
65 */
66 public MainFrame() {
67 this.setTitle("复利计算器");
68 this.setBoundAtCenter();
69 this.setResizable(true);
70 //this.setLayout(new VFlowLayout());
71 this.add(this.createTextPanel(), BorderLayout.CENTER);
72 this.add(this.createButtonPanel(), BorderLayout.SOUTH);
73 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
74 this.setVisible(true);
75 }
76
77 /**
78 * 居中窗体
79 */
80 private void setBoundAtCenter() {
81 Toolkit toolkit = Toolkit.getDefaultToolkit();
82 Dimension dim = toolkit.getScreenSize();
83 this.setSize(245, 350);
84 int width = dim.width - this.getWidth() >> 1;
85 int hight = (dim.height - this.getHeight() >> 1) - 32;
86 this.setLocation(width, hight);
87 }
88
89 /**
90 * 初始化文本框与标签位置以及标签值
91 */
92 private void initTextField() {
93 int x = 90;
94 int y = 50;
95 int w = 130;
96 int h = 20;
97 for (int i = 0; i < texts.length; i++) {
98 texts[i] = new TextField(x, y, w, h);
99 labels[i] = new JLabel(labelTexts[i]);
100 labels[i].setBounds(x-80, y, w, h);
101 y += 28;
102 }
103 }
104
105 /**
106 * 创建面板存放TextField和label
107 */
108 private JPanel createTextPanel() {
109 JPanel panel = new JPanel();
110 panel.setLayout(null);
111 this.initTextField();
112 for (int i = 0; i < texts.length; i++) {
113 panel.add(texts[i]);
114 panel.add(labels[i]);
115 }
116 return panel;
117 }
118
119 /**
120 * 设置按钮以及监听
121 */
122 private JPanel createButtonPanel(){
123
124 JPanel btnPanel = new JPanel(new VFlowLayout());
125 JPanel btnPanel1 = new JPanel(new FlowLayout());
126
127
128 //----------设置jbtOk的监听------------------
129 this.jbtOk.addActionListener(new ActionListener() {
130
131 @Override
132 public void actionPerformed(ActionEvent e) {
133 if(!pFlag) {
134 texts[0].setText(String.valueOf(calculatePrincipal()));
135 }else {
136 texts[4].setText(String.valueOf(calculateCInterest()));
137 }
138 }
139
140 });
141
142 btnPanel1.add(this.jbtOk);
143
144 //----------设置jbtExit的监听------------------
145 this.jbtExit.addActionListener(new ActionListener() {
146
147 @Override
148 public void actionPerformed(ActionEvent e) {
149 // TODO Auto-generated method stub
150 System.exit(EXIT_ON_CLOSE);
151
152 }
153 });
154
155 btnPanel1.add(this.jbtExit);
156 //先添加ButtonGroup
157 btnPanel.add(this.createButtonGroup());
158 btnPanel.add(btnPanel1);
159 return btnPanel;
160 }
161
162 /**
163 * 设置jradio按钮以及监听
164 */
165 private JPanel createButtonGroup() {
166 JPanel grpPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
167 ButtonGroup btnGrp = new ButtonGroup();
168 JRadioButton jrb1 = new JRadioButton("本金");
169 //----------设置jrb1的监听------------------
170 jrb1.addActionListener(new ActionListener() {
171
172 @Override
173 public void actionPerformed(ActionEvent e) {
174 pFlag = false;
175 fFlag = true;
176 changeType();
177 }
178 });
179 btnGrp.add(jrb1);
180 JRadioButton jrb2 = new JRadioButton("复利");
181 //----------设置jrb2的监听------------------
182 jrb2.addActionListener(new ActionListener() {
183
184 @Override
185 public void actionPerformed(ActionEvent e) {
186 pFlag = true;
187 fFlag = false;
188 changeType();
189 }
190 });
191 btnGrp.add(jrb2);
192 grpPanel.add(jrb1);
193 grpPanel.add(jrb2);
194 return grpPanel;
195 }
196
197 private void changeType() {
198 this.texts[0].setEnabled(pFlag);
199 this.texts[4].setEnabled(fFlag);
200 if(pFlag) {
201 this.texts[4].setText("由此得出数值");
202 this.texts[0].setText(null);
203 } else {
204 this.texts[0].setText("由此得出数值");
205 this.texts[4].setText(null);
206 }
207 }
208
209 /**
210 * F=P*(1+i)N(次方)
211 * F:复利终值
212 * P:本金
213 * R:利率
214 * N:利率获取时间的整数倍
215 * Y: 存入年限
216 *
217 * 计算本金
218 */
219 private double calculatePrincipal(){
220 this.R = Double.parseDouble(this.texts[1].getText().trim());
221 this.Y = Double.parseDouble(this.texts[2].getText().trim());
222 this.N = Double.parseDouble(this.texts[3].getText().trim());
223 this.F = Double.parseDouble(this.texts[4].getText().trim());
224 System.out.println(Math.pow((1+R),N));
225 return F/Math.pow((1+R),N);
226
227
228 }
229
230 /**
231 * 计算复利
232 */
233 private double calculateCInterest(){
234 this.P = Double.parseDouble(this.texts[0].getText().trim());
235 this.R = Double.parseDouble(this.texts[1].getText().trim());
236 this.Y = Double.parseDouble(this.texts[2].getText().trim());
237 this.N = Double.parseDouble(this.texts[3].getText().trim());
238 return P*Math.pow((1+R),N);
239 }
240 }