一个简单java paint/repaint方法程序

packagedrawstring;//继承frame来画字符串。importjava.awt.Button;importjava.awt.Color;importjav... package drawstring;//继承frame来画字符串。
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DrawString extends Frame implements ActionListener{

static boolean b1 =false;
static boolean b2= false;
static boolean b3= false;
static int counter=0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;

DrawString()//析构函数
{

setSize(300,400);
btn1=new Button("显示字符串");
btn2=new Button("显示图形");
btn3=new Button("退出");
btn4=new Button("清屏");
setLayout(new FlowLayout());
add(btn1);
add(btn2);
add(btn3);
add(btn4);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
setVisible(true);
//setBackground(Color.white);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="退出")
{ System.exit(0);}
if(e.getActionCommand()=="显示图形")
{
// setSize(300,500);
b2= true;
// btn2.setEnabled(false);
counter++;

}
if(e.getActionCommand()=="显示字符串")
{
// setSize(300,500);
b1 = true;
}
if(e.getSource()==btn4)
{
b3=true;

}
repaint();

}
public void paint(Graphics g)//frame类里面的函数,继承过来的。
{
// super.paint(g);

if(b1==true){
g.setColor(Color.red);
g.drawString("hello,september", 100, 200);

}
if(b2==true){
g.setColor(Color.red);
g.drawOval(60, 100, 200, 200);
System.out.print(counter);
//b2=false;

}
if(b3==true){
g.setColor(getBackground());
if(b1==true)
{g.drawString("hello,september", 100, 200);}
if(b2==true)g.drawOval(60, 100, 200, 200);

//setForeground(getBackground());

}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

new DrawString();

}

}
我想要实现的结果是:按了清屏以后依然能够用显示字符串与图形,但是我这个程序一旦按了清屏就不能再按显示字符串了。我对paint程序了解甚少。
请高手帮忙。
运行结果如下:
为什么你修改之后的程序我要按两次清屏才能清呢?????????
展开
 我来答
dingjun0401
2010-05-09
知道答主
回答量:18
采纳率:0%
帮助的人:13.6万
展开全部
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DrawString extends Frame implements ActionListener{

static boolean b1 =false;
static boolean b2= false;
static boolean b3= false;
static int counter=0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;

DrawString()//析构函数
{

setSize(300,400);
btn1=new Button("显示字符串");
btn2=new Button("显示图形");
btn3=new Button("退出");
btn4=new Button("清屏");
setLayout(new FlowLayout());
add(btn1);
add(btn2);
add(btn3);
add(btn4);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
setVisible(true);
//setBackground(Color.white);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="退出")
{ System.exit(0);}
if(e.getActionCommand()=="显示图形")
{
// setSize(300,500);
b2= true;
// btn2.setEnabled(false);
counter++;

}
if(e.getActionCommand()=="显示字符串")
{
// setSize(300,500);
b1 = true;
}
if(e.getSource()==btn4)
{
b3=true;

}
repaint();
}
public void paint(Graphics g)//frame类里面的函数,继承过来的。
{
// super.paint(g);

if(b1==true){
Color c = g.getColor();
g.setColor(Color.red);
g.drawString("hello,september", 100, 200);
g.setColor(c);

}
if(b2==true){
Color c = g.getColor();
g.setColor(Color.red);
g.drawOval(60, 100, 200, 200);
System.out.print(counter);
g.setColor(c);

}
if(b3==true){
g.setColor(getBackground());
b1=false;
b2 = false;
b3 = false;
}
}

public static void main(String[] args) {
new DrawString();
}

}
我帮你调试了一下,看看是不是你想要的效果!
xufebruary8023
2010-05-09 · TA获得超过470个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:259万
展开全部
在清屏后应该,恢复 b1 b2 b3 的初始设置,即 b1 b2 b3 设为 false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式