import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
public class advance
{
  public static void main(String[] args)
  {
    JFrame frame=new AreaTestFrame();
    frame.setDefaultCloseOperation(JFrame_ON_CLOSE);
    frame.seVisible(true);
  }
}
class  AreaTestFrame extends JFrame
{
  public AreaTestFrame()
  {
    setTitle("advance");
    setSize(WIDTH,HEIGHT);
    area1=new Area(new Ellipse2D.Double(100,100,150,100));
    area2=new Area(new Retangle2D.Double(150,150,150,100));
    Container contentPane=getContentPane();
    panel=new JPanel();
    {
      public void paintComponent(Graphics g)
      {
        super.paintComponent(g);
        Graphics2D g2=(Graphics)g;
        g2.draw(area1);
        g2.draw(area2);
        if(area!=null)   g2.fill(area);
      }
    }
    contentPane.add(panel, BorderLayout.CENTER);
    JPanel buttonPanel=new JPanel();
    ButtonGroup group=new ButtonGroup();
    JRadioButton addButton=new JRadioButton("并",false);
    buttonPanel.add(addButton);
    group.add(addButton);
    addButton.addActionListener(new  ActionListener() {
       public void actionPerformed(ActionEvent event)
       {
         area=new Area();
         area.add(area1);
         area.add(area2);
         panel.repaint();
       }
});
     JRadioButton subtractButton=new JRadioButton("减",false);
     buttonPanel.add(subtractButton);
     group.add(subtractButton);
     addButton.addActionListener(new  ActionListener() {
       public void actionPerformed(ActionEvent event)
       {
         area=new Area();
         area.add(area1);
         area.subtract(area2);
         panel.repaint();
       }
});
     JRadioButton intersectButton=new JRadioButton("并",false);
     buttonPanel.add(intersectButton);
     group.add(intersectButton);
     addButton.addActionListener(new  ActionListener() {
       public void actionPerformed(ActionEvent event)
       {
         area=new Area();
         area.add(area1);
         area.intersect(area2);
         panel.repaint();
       }
});
     JRadioButton excusiveOrButton=new JRadioButton("并",false);
     buttonPanel.add(exclusiveOrButton);
     group.add(exclusiveOrButton);
     addButton.addActionListener(new  ActionListener() {
       public void actionPerformed(ActionEvent event)
       {
         area=new Area();
         area.add(area1);
         area.exlusiveOr(area2);
         panel.repaint();
       }
});
     contentPane.add(buttonPanel,BorderLayout.NORTH);
}
     private JPanel panel;
     private Area area;
     private Area area1;
     private Area area2;
     private static final int WIDTH=400;
     private static final int HEIGHT=400;
}
以上各处的红色代码:   super.paintComponent(g)和Graphics2D g2=(Graphics)g是什么含义?还有JRadioButton和JButton有什么不同?panel.repaint()这条语句可不可以省略掉?

解决方案 »

  1.   

    super.paintComponent(g),调用父类的paintComponent;
    Graphics2D g2=(Graphics2D)g; 强制转化为2维效果的画图对象;
    还有JRadioButton和JButton有什么不同?--这个你运行一下就知道结果了;
    panel.repaint() 是把panel重画一遍
      

  2.   

    JRadioButton 是一个单选的按钮 一组JRadioButton中只有一个能被选中 
    JButton 是一个普通的按钮,就是你平时玩游戏点的“进入游戏” “读取存档”之类的panel.repaint()不可以省略掉
    具体为什么你可以在程序中把它注释掉跑一遍就知道了