MVC是一种通过模型、视图、控制器构造一个软件或组件的理想办法。
在例15.13中首先编一个封装三角形的类,然后再编写一个窗口。要求窗口使用3个文本框和1个文本区为三角形对象中的数据提供视图,其中3个文本框用来显示和更新三角形对象的3个边的长度,文本区对象用来显示三角形的面积。窗口有一个按钮,用户单击该按钮后,程序用3个文本框中的数据分别作为三角形的3个边的长度,并计算三角形的面积显示在文本框中。
Example15_13.java
public class Example15_13 {
public static void main(String args[]){
WindowTriangle win=new WindowTriangle();
win.setTitle("使用MVC结构");
win.setBounds(100,100,420,260);
}
}
WindowTriangle.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WindowTriangle extends JFrame implements ActionListener{
Triangle triangle; //数据对象
JTextField textA,textB,textC;
JTextArea showArea;
JButton controlButton;
WindowTriangle(){
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
triangle=new Triangle();
textA=new JTextField(5);
textB=new JTextField(5);
textC=new JTextField(5);
showArea=new JTextArea();
controlButton=new JButton("计算面积");
JPanel pNorth=new JPanel();
pNorth.add(new JLabel("边A:"));
pNorth.add(textA);
pNorth.add(new JLabel("边B:"));
pNorth.add(textB);
pNorth.add(new JLabel("边C:"));
pNorth.add(textC);
pNorth.add(controlButton);
controlButton.addActionListener(this);
add(pNorth,BorderLayout.NORTH);
add(new JScrollPane(showArea),BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e){
try{
double a=Double.parseDouble(textA.getText().trim());
double b=Double.parseDouble(textB.getText().trim());
double c=Double.parseDouble(textC.getText().trim());
triangle.setA(a);
triangle.setB(b);
triangle.setC(c);
String area=triangle.getArea();
showArea.append("三角形"+a+","+b+","+c+"的面积:") ;
showArea.append(area+"\n");
}
catch (Exception ex){
showArea.append("\n"+ex+"\n");
}
}
}
Triangle.java
public class Triangle {
double sideA,sideB,sideC,area;
boolean isTriangle;
public String getArea(){
if(isTriangle){
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
return String.valueOf(area);
}
else {
return "无法计算面积";
}
}
public void setA(double a){
sideA=a;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
isTriangle=true;
else
isTriangle=false;
}
public void setB(double b){
sideB=b;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
isTriangle=true;
else
isTriangle=false;
}
public void setC(double c){
sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
isTriangle=true;
else
isTriangle=false;
}
}
运行结果