题目:编写一个程序,以允许用户可以从一个JComboBox中选择一个形状,然后用paint方法在随机的位置用随机的尺寸绘制该形状20次。在第一次调用paint方法时,应将JComboBox中的第一个列表项作为默认形状来显示。
下面是我写的代码。问题有3个:
1、第一次调用paint方法绘制Line时点确认按钮没反应,必须是第二次选择Line后才可以绘制;
2、绘制一次后,第二次按确认按钮无法将前一次的绘制结果清除。
我是初学者,望各位强人不吝赐教,拜谢!



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Heyu3 extends JFrame{
    private JComboBox shapeBox;
    private JButton yesButton;
    private JLabel shapeLabel, label;
    private String shapeNames[] = { "Line", "Rectangle", "Oval"};
    private String shape;
    
    
    public Heyu3(){
        super("绘制自选图形");
        
        Container container = getContentPane();
        container.setLayout( new FlowLayout() );
        
        shapeLabel = new JLabel("请选择您要绘制的图形:");
        
        shapeBox = new JComboBox( shapeNames );
        shapeBox.setMaximumRowCount( 3 );
        shapeBox.addItemListener(
                
                new ItemListener(){
                    
                    public void itemStateChanged( ItemEvent event ){
                        shape = shapeNames[ shapeBox.getSelectedIndex() ];
                        
                    }
                }
                
        );
        
        yesButton = new JButton("确定");
        yesButton.addActionListener( new YesButtonHandler() );
        
        container.add( shapeLabel );
        container.add( shapeBox );
        container.add( yesButton );
        
        setSize( 500, 500 );
        setVisible( true );
        
    }
    
    private class YesButtonHandler implements ActionListener{
        
        public void actionPerformed( ActionEvent event ){
            
            if( event.getSource() == yesButton)
                
                repaint();
            
        }
    }
    
    public void paint( Graphics g ){
          for(int count=0;count<20;count++){
              
              if(shape.equals("Line"))
                    g.drawLine((int)(Math.random()*100)+50, (int)(Math.random()*100)+150,(int)(Math.random()*100)*(int)(Math.random()*10)+20, (int)(Math.random()*10)*(int)(Math.random()*10)+20);
                
              else if(shape.equals("Rectangle"))
                    g.drawRect((int)(Math.random()*100)+50, (int)(Math.random()*100)+150,(int)(Math.random()*100)*(int)(Math.random()*10)+20, (int)(Math.random()*10)*(int)(Math.random()*10)+20);
                
              else
                    g.drawOval((int)(Math.random()*100)+50, (int)(Math.random()*100)+150,(int)(Math.random()*100)*(int)(Math.random()*10)+20, (int)(Math.random()*10)*(int)(Math.random()*10)+20);
            
          }
        
    }
    public static void main( String args[]){
        Heyu3 application = new Heyu3();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }

}