关于Java的JFrame.add()方法添加两次相同控件的问题
add两次相同的控件后,会把前面的自动取消掉(这里只截取部分示例代码) 如:
firstText = new JTextField(3);
add(firstText);
opration = new JTextField(1);
add(opration);
secondText = new JTextField(3);
add(secondText);
//amount = new JButton("=");
//add(amount);
add(firstText);
result = new JTextField(5);
result.setEnabled(false);
add(result);
这样看起来是添加了五个组件( firstText 、 opration 、 secondText 以及第二次添加的 FirstText 和 result ),但实际上添加了四个,因为最前面的一个FirstText被后面第四个给覆盖了。但是要注意了,这里的覆盖并不是在第一个的位置覆盖,而是直接把第一个作废了,也就是FirstText只显示在第三个(因为此时只有四个,FirstText是在倒数第二个)
下图是重复添加两次相同组件的程序截图(为了更直观我把按钮给注释掉了):
下图是正常的程序截图:
最后,鄙人给大家贴上自己敲的简陋的代码,供大家吐槽
package deefin.com;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener{
private JTextField firstText;
private JTextField opration;
private JTextField secondText;
private JButton amount;
private JTextField result;
public Calculator() {
super("简单计算器");
setSize(250,80);
setLayout(new FlowLayout());
firstText = new JTextField(3);
add(firstText);
opration = new JTextField(1);
add(opration);
secondText = new JTextField(3);
add(secondText);
amount = new JButton("=");
add(amount);
result = new JTextField(5);
result.setEnabled(false);
add(result);
setVisible(true);
amount.addActionListener(this);
}
public static void main(String[] args) {
new Calculator();
}
@Override
public void actionPerformed(ActionEvent e) {
char op = opration.getText().charAt(0);
int first = Integer.valueOf(firstText.getText());
int second = Integer.valueOf(secondText.getText());
int result1 = 0;
switch (op) {
case '+':
result1 = first + second;
break;
case '-':
result1 = first - second;
break;
case '*':
result1 = first * second;
break;
case '/':
if(second == 0) result.setText("false");
else result1 = first / second;
break;
default:
break;
}
if(second == 0){
;
}else{
String s = String.valueOf(result1);
result.setText(s);
}
}
}