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()这条语句可不可以省略掉?
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()这条语句可不可以省略掉?
Graphics2D g2=(Graphics2D)g; 强制转化为2维效果的画图对象;
还有JRadioButton和JButton有什么不同?--这个你运行一下就知道结果了;
panel.repaint() 是把panel重画一遍
JButton 是一个普通的按钮,就是你平时玩游戏点的“进入游戏” “读取存档”之类的panel.repaint()不可以省略掉
具体为什么你可以在程序中把它注释掉跑一遍就知道了