当前位置:编程学习 > JAVA >>

JPanel中画图看不见

package net.zju.vie;

import java.awt.Color;
package net.zju.vie;

public class MyIllegalException extends Exception{
private static final long serialVersionUID = 1L;
    
public MyIllegalException(){}

public MyIllegalException(String message)
{
super(message);
}
}

package net.zju.vie;


public interface Test {

public float getArea();
public float getCircumference();
}

abstract class Shape {

// 记录x坐标和y坐标
protected float []x_pos;
protected float []y_pos;
// 定点个数
protected int dotNum;
// 图形各边边长
protected float length[];
// 图形颜色
protected Color color;
// 图形面积
protected float area;

protected float circumference;
}

package net.zju.vie;

public interface Display {

public void drawGraph();
public void eraser();
}

package net.zju.vie;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

class Triangle extends Shape implements Test,Display{

private JPanel triPanel;
Graphics g;
JFrame frame=new JFrame("hello");
//系统给出默认三角形及其各个参数参考值
public Triangle()
{
float []x={0,300,600};
float []y={300,150,300};
x_pos=x;
y_pos=y;
//顶点个数就等于坐标点个数
dotNum=x.length;
color=Color.red;
try {
length=getLength();
} catch (MyIllegalException e) {
e.printStackTrace();
}
area=calculateArea();
circumference=calculateCircumference();
// frame.getContentPane().setVisible(false);
triPanel=new JPanel();
triPanel.setBackground(Color.cyan);
 frame.getContentPane().add(triPanel);
 frame.setSize(800,400);
//  frame.getContentPane().setVisible(false);
 frame.setVisible(true);
 ((JPanel)frame.getContentPane()).setOpaque(false);
 frame.addWindowListener(new WindowAdapter(){
 public void windowClosing(WindowEvent e)
 {
 frame.setVisible(false);
 frame.dispose();
 System.exit(0);
 }
 });
 System.out.println("三角形面积为:"+getArea());
 System.out.println("三角形周长为:"+getCircumference());
}

public Triangle(float []x,float []y,Color color)
{
x_pos=x;
y_pos=y;
this.color=color;
try {
length=getLength();
} catch (MyIllegalException e) {
e.printStackTrace();
}
dotNum=x.length;
area=calculateArea();
circumference=calculateCircumference();
triPanel=new JPanel();
}

@Override
public float getArea() {
// TODO Auto-generated method stub
return area;
}

@Override
public float getCircumference() {
// TODO Auto-generated method stub
return circumference;
}

@Override
public void drawGraph() {
// TODO Auto-generated method stub
int i;
g=triPanel.getGraphics();
// g.clearRect(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
g.setColor(Color.red);
//根据三个坐标点画三角形
for(i=0;i<dotNum-1;++i)
g.drawLine((int)x_pos[i],(int)y_pos[i],(int)x_pos[i+1],(int)y_pos[i+1]);
      g.drawLine((int)x_pos[i], (int)y_pos[i], (int)x_pos[0], (int)y_pos[0]);
      g.drawOval(400, 300, 600, 600);
}

@Override
public void eraser() {
// TODO Auto-generated method stub

}

//计算三角形边长,并保存在length数组中
public float[] getLength() throws MyIllegalException
{
int i;
//用来暂时保存三角型边长,直到判断三边合法,再赋值给length数组
float len[]=new float[3];
//首先判断三角形坐标点数是否是3个,否则抛出异常
if(this.dotNum!=3)
throw new MyIllegalException("定点数不正确!");
for(i=0;i<dotNum-1;++i)
len[i]=(float)Math.sqrt((x_pos[i+1]-x_pos[i])*(x_pos[i+1]-x_pos[i])+(y_pos[i+1]-y_pos[i])*(y_pos[i+1]-y_pos[i]));
    len[i]=(float)Math.sqrt((x_pos[i]-x_pos[0])*(x_pos[i]-x_pos[0])+(y_pos[i]-y_pos[0])*(y_pos[i]-y_pos[0]));
//判断三角形任意两边和是否大于第三边,否则抛出异常
for(i=0;i<dotNum;++i)
if(len[i]+len[(i+1)%3]<=len[(i+2)%3])
throw new MyIllegalException("存在两边和不大于第三边,该坐标构不成三角形!");
return len;
}

//由s=l*(l-a)*(l-b)*(l-c) l=(a+b+c)/2公式计算三角形面积
public float calculateArea()
{
float ar=1,l=0;
for(int i=0;i<dotNum;++i)
l+=length[i];
    l/=2;
    ar*=l;
    for(int i=0;i<dotNum;++i)
         ar*=(l-length[i]);
    return ar;
}

//计算三角形边长
public float calculateCircumference()
{
float circum=0;
for(int i=0;i<dotNum;++i)
circum+=length[i];
return circum;
}

public JPanel getPanel()
{
return triPanel;
}
}

package net.zju.vie;

//import javax.swing.JFrame;

public class TestCanvas{

public static void main(String []args)
{
Triangle tri=new Triangle();
tri.drawGraph();
}
}
为什么这样画的图看不见啊?请大家帮忙看下,并修正!谢谢!
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,