改错题:

為什麼太陽和小孩畫出來後不能清除了呢?想了N久,只怪自己沒學好GUI,後來有人回答了,

加上jp1.repaint();jp2.repaint();就OK!那麼

 

 
  
1 import java.awt. * ;
2   import javax.swing. * ;
3   import java.awt.event. * ;
4
5   public class SunAndChild extends JFrame {
6 MyPanel mp = null ;
7 /**
8 * @param args
9 */
10 public static void main(String[] args) {
11 // TODO Auto-generated method stub
12 SunAndChild sac = new SunAndChild();
13 }
14
15 public SunAndChild(){
16 mp = new MyPanel();
17 this .add(mp);
18 this .setTitle( " 太阳和小孩 " );
19 this .setSize( 600 , 600 );
20 this .setLocation( 300 , 100 );
21 this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
22 this .setResizable( false );
23 this .setVisible( true );
24 }
25 }
26
27 class MyPanel extends JPanel implements ActionListener{
28 JPanel jp1,jp2,jp3,jp4;
29 JButton jb1,jb2,jb3,jb4;
30
31 public MyPanel(){
32 jp1 = new JPanel();
33 jp2 = new JPanel();
34 jp3 = new JPanel();
35 jp4 = new JPanel();
36
37 jb1 = new JButton( " 太阳 " );
38 // 注册监听
39 jb1.addActionListener( this );
40 jb2 = new JButton( " 小孩 " );
41 // 注册监听
42 jb2.addActionListener( this );
43 jb3 = new JButton( " 清除太阳 " );
44 // 注册监听
45 jb3.addActionListener( this );
46
47 jb4 = new JButton( " 清除小孩 " );
48 // 注册监听
49 jb4.addActionListener( this );
50
51
52 jp3.add(jb1);
53 jp3.add(jb3);
54
55 jp4.add(jb2);
56 jp4.add(jb4);
57 jp1.setLayout( new BorderLayout());
58 jp1.add(jp3,BorderLayout.SOUTH);
59
60 jp2.setLayout( new BorderLayout());
61 jp2.add(jp4, BorderLayout.SOUTH);
62
63 this .setLayout( new GridLayout( 1 , 2 ));
64 this .add(jp1);
65 this .add(jp2);
66
67 jp1.setBackground(Color.BLACK);
68 jp2.setBackground(Color.BLUE);
69 }
70
71
72 public void drawSun(){
73 Graphics g = this .getGraphics();
74 g.setColor(Color.RED);
75 g.fillOval( 100 , 100 , 100 , 100 );
76 // 上面的线
77 g.drawLine( 150 , 100 , 150 , 50 );
78 // 下面的线
79 g.drawLine( 150 , 200 , 150 , 250 );
80 // 左面的线
81 g.drawLine( 100 , 150 , 50 , 150 );
82 // 右面的线
83 g.drawLine( 200 , 150 , 250 , 150 );
84
85 }
86 public void drawChild(){
87 Graphics g = this .getGraphics();
88 g.setColor(Color.YELLOW);
89 //
90 g.fillOval( 400 , 100 , 100 , 100 );
91 g.setColor(Color.BLUE);
92 // 左眼
93 g.fillRect( 425 , 125 , 5 , 5 );
94 // 右眼
95 g.fillRect( 475 , 125 , 5 , 5 );
96 // 鼻子
97 g.drawLine( 450 , 125 , 450 , 150 );
98 //
99 g.drawLine( 425 , 175 , 475 , 175 );
100 // 身体
101 // g.drawRect(x, y, width, height);
102 // 左胳膊
103 // g.drawRect(x, y, width, height);
104 // 右胳膊
105 // g.drawRect(x, y, width, height);
106 // 左腿
107 // g.drawRect(x, y, width, height);
108 // 右腿
109 // g.drawRect(x, y, width, height);
110 }
111
112 public void actionPerformed(ActionEvent arg0) {
113 // TODO Auto-generated method stub
114 if (arg0.getSource() == jb1)
115 {
116 this .drawSun();
117 }
118 if (arg0.getSource() == jb2)
119 {
120 this .drawChild();
121 }
122 if (arg0.getSource() == jb3)
123 {
124 // jp1.setBackground(Color.black);
125 jp1.repaint();
126 }
127 if (arg0.getSource() == jb4)
128 {
129 // jp2.setBackground(Color.BLUE);
130 jp2.repaint(); // /
131 }
132
133
134 }
135 }
136
137

 

 

 究竟repaint()執行了什麼操作?我就納悶了:接著看了這裡的解釋,更加迷茫了http://blog.csdn.net/yubofighting/archive/2008/09/29/2997676.aspx

既然調用了原來的paint()方法,那應該是重畫太陽和小孩才對呀,為什麼清空了呢?

转载于:https://www.cnblogs.com/SCAU_que/articles/1750993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值