且不说图形是什么?我能会出来,就是自定义了Paint()后,每次打开网页,就自动调用Paint(),覆盖了init()中的标签,文本等,怎样才能使Gui始终显示又在按下BUtton后会自动绘图呢?(快交作业了,跪求指导 )!!!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;import javax.swing.JApplet;
public class AppletTwo extends JApplet implements ActionListener
{
int x=0,y=0,width=0,height=0,startAngle=0,atcAngle=0;
JLabel l1,l2,l3,l4,l5,l6;
JTextField t1,t2,t3,t4,t5,t6;
JButton b;
public void init()
{
l1=new JLabel("x");
l1.setBounds(0,0,50,50);
l2=new JLabel("y");
l2.setBounds(0,50,50,50);
l3=new JLabel("width");
l3.setBounds(150,0,100,50);
l4=new JLabel("height");
l4.setBounds(150,50,100,50);
l5=new JLabel("startAngle");
l5.setBounds(350,0,150,50);
l6=new JLabel("atcAngle");
l6.setBounds(350,50,150,50);
t1=new JTextField();
t1.setBounds(50,0,100,50);
t2=new JTextField();
t2.setBounds(50,50,100,50);
t3=new JTextField();
t3.setBounds(250,0,100,50);
t4=new JTextField();
t4.setBounds(250,50,100,50);
t5=new JTextField();
t5.setBounds(500,0,100,50);
t6=new JTextField();
t6.setBounds(500,50,100,50);
b=new JButton("绘制");
b.setBounds(620,50,180,50);
b.setActionCommand("play");
b.addActionListener(this);
getContentPane().add(l1);
getContentPane().add(l2);
        getContentPane().add(l3);
        getContentPane().add(l4);
        getContentPane().add(l5);
        getContentPane().add(l6);
        getContentPane().add(t1);
        getContentPane().add(t2);
        getContentPane().add(t3);
        getContentPane().add(t4);
        getContentPane().add(t5);
        getContentPane().add(t6);
getContentPane().add(b);
setVisible(true);
setLayout(null);                                                                                            
    }
    public void actionPerformed(ActionEvent e)  
    {
        if(e.getActionCommand().equals("play"))
        {
         x=Integer.parseInt(t1.getText());
         y=Integer.parseInt(t2.getText());
         width=Integer.parseInt(t3.getText());
         height=Integer.parseInt(t4.getText());
         startAngle=Integer.parseInt(t5.getText());
         atcAngle=Integer.parseInt(t6.getText());  
         repaint();
        }        
    }
public void paint(Graphics g)
{
if(isOpaque)
{
g.drawRect(x,y,width-1,height-1);
g.drawLine(x,y,x+width,y+height);
g.drawLine(x+width,y,x,y+height);
g.drawLine((int)(x+width/2),y,(int)(x+width/2),y+height);
g.drawLine(x,(int)(y+height/2),x+width,(int)(y+height/2));
g.drawOval(x,y,width,height);
g.setColor(Color.black);
g.fillArc(x,y,width,height,startAngle,atcAngle);
}
     }
}  

解决方案 »

  1.   

    不好意思。刚才我把程序抄错了,正确的应该是
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;import javax.swing.JApplet;
    public class AppletTwo extends JApplet implements ActionListener
    {
    int x=0,y=0,width=0,height=0,startAngle=0,atcAngle=0;
    JLabel l1,l2,l3,l4,l5,l6;
    JTextField t1,t2,t3,t4,t5,t6;
    JButton b;
    public void init()
    {
    l1=new JLabel("x");
    l1.setBounds(0,0,50,50);
    l2=new JLabel("y");
    l2.setBounds(0,50,50,50);
    l3=new JLabel("width");
    l3.setBounds(150,0,100,50);
    l4=new JLabel("height");
    l4.setBounds(150,50,100,50);
    l5=new JLabel("startAngle");
    l5.setBounds(350,0,150,50);
    l6=new JLabel("atcAngle");
    l6.setBounds(350,50,150,50);
    t1=new JTextField();
    t1.setBounds(50,0,100,50);
    t2=new JTextField();
    t2.setBounds(50,50,100,50);
    t3=new JTextField();
    t3.setBounds(250,0,100,50);
    t4=new JTextField();
    t4.setBounds(250,50,100,50);
    t5=new JTextField();
    t5.setBounds(500,0,100,50);
    t6=new JTextField();
    t6.setBounds(500,50,100,50);
    b=new JButton("绘制");
    b.setBounds(620,50,180,50);
    b.setActionCommand("play");
    b.addActionListener(this);
    getContentPane().add(l1);
    getContentPane().add(l2);
            getContentPane().add(l3);
            getContentPane().add(l4);
            getContentPane().add(l5);
            getContentPane().add(l6);
            getContentPane().add(t1);
            getContentPane().add(t2);
            getContentPane().add(t3);
            getContentPane().add(t4);
            getContentPane().add(t5);
            getContentPane().add(t6);
    getContentPane().add(b);
    setVisible(true);
    setLayout(null);                                                                                            
        }
        public void actionPerformed(ActionEvent e)  
        {
            if(e.getActionCommand().equals("play"))
            {
             x=Integer.parseInt(t1.getText());
             y=Integer.parseInt(t2.getText());
             width=Integer.parseInt(t3.getText());
             height=Integer.parseInt(t4.getText());
             startAngle=Integer.parseInt(t5.getText());
             atcAngle=Integer.parseInt(t6.getText());  
             repaint();
            }        
        }
    public void paint(Graphics g)
    {
    g.drawRect(x,y,width-1,height-1);
    g.drawLine(x,y,x+width,y+height);
    g.drawLine(x+width,y,x,y+height);
    g.drawLine((int)(x+width/2),y,(int)(x+width/2),y+height);
    g.drawLine(x,(int)(y+height/2),x+width,(int)(y+height/2));
    g.drawOval(x,y,width,height);
    g.setColor(Color.black);
    g.fillArc(x,y,width,height,startAngle,atcAngle);
         }
    }  
      

  2.   

    帮你顶一下吧~ 我在Eclipse中运行了下,似乎没发现什么问题。
    不过,在不输入数字的情况下按“绘制”按钮,有个异常。Integer.parseInt异常,从防错角度看,还是应该处理下的,确保所有数字都有输入情况下,才进行数字解析。有种做法可以尝试下,就是在paint中首先调用默认处理绘制控件:public void paint(Graphics g)
    {
       super.paint(g); //先进行默认绘制
       ...
    }
      

  3.   

    谢谢二楼,一天我会给分,麻烦你能再教一下为什么要用super.paint(g);?
      

  4.   

    我的理解是lz重载了paint()方法,而在paint方法中,只是进行了一些画线处理,并没有进行控件的绘图处理。使用super.paint方法,就是使用JApplet从Container那继承过来的paint方法,让容器中的每个组件都进行paint处理,从而达到绘制所有控件的目的。Java doc关于paint方法的使用,提到了如果重写paint方法,应该将super.paint作为第一条语句调用~ 不知道这样有没说清楚,我也刚学,很多东西是看JDK文档理解的,^_^