当前位置: 技术问答>java相关
在线等待!急!多谢!一个画图的程序,输入两个坐标值,以此为对角线顶点坐标做矩形。。。高手给看看。
来源: 互联网 发布时间:2015-10-16
本文导语: /*下列代码是一个画图的程序,在四个文本框中分别输入四个数字(两对坐标) 可以以此为坐标画出一个矩形,可是本程序出了问题,可以调试通过但无法画出图形 ,百思不得其解,请高手指教,多谢,在线等待,...
/*下列代码是一个画图的程序,在四个文本框中分别输入四个数字(两对坐标)
可以以此为坐标画出一个矩形,可是本程序出了问题,可以调试通过但无法画出图形
,百思不得其解,请高手指教,多谢,在线等待,多谢。*/
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
/*定义一个画图的类*/
class SubPanel extends Panel
{
int l1,l2,l3,l4;
public SubPanel(int l1,int l2,int l3,int l4)
{
this.l1=l1;
this.l2=l2;
this.l3=l3;
this.l4=l4;
}
public void Draw(Graphics g)
{
System.out.println(g);// 测试语句,可打印出;
System.out.println(l1+","+l2+","+l3+","+l4);// 测试语句,可打印出;
g.drawRect(l1,l2,l3,l4);
System.out.println("1111");
}
}
public class draw implements ActionListener
{
int i1, i2,i3,i4;
Frame f=new Frame("drawing");
TextField tf1=new TextField(5);
TextField tf2=new TextField(5);
TextField tf3=new TextField(5);
TextField tf4=new TextField(5);
Button b=new Button("我画");
SubPanel sp;
public draw()
{
f.add(tf1);
f.add(tf2);
f.add(tf3);
f.add(tf4);
f.add(b);
f.pack();
b.addActionListener(this);
f.setLayout(new FlowLayout());
f.setSize(400,500);
f.setBackground(new Color(89,145,145));
f.setForeground(new Color(0,0,255));
f.setVisible(true);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
}
public void actionPerformed(ActionEvent e)
{
i1=Integer.parseInt(tf1.getText());
i2=Integer.parseInt(tf2.getText());
i3=Integer.parseInt(tf3.getText());
i4=Integer.parseInt(tf4.getText());
sp=new SubPanel(i1,i2,i3,i4);
System.out.print(i1+" "+i2+" "+i3+" "+i4);// 测试语句,//可打印出;
f.add(sp);
Graphics g=sp.getGraphics();
sp.Draw(g);
System.out.println("222");// 测试语句,可打印出;
}
public static void main(String args[])
{
draw d=new draw();
System.out.println("555");// 测试语句,可打印出;
}
}
可以以此为坐标画出一个矩形,可是本程序出了问题,可以调试通过但无法画出图形
,百思不得其解,请高手指教,多谢,在线等待,多谢。*/
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
/*定义一个画图的类*/
class SubPanel extends Panel
{
int l1,l2,l3,l4;
public SubPanel(int l1,int l2,int l3,int l4)
{
this.l1=l1;
this.l2=l2;
this.l3=l3;
this.l4=l4;
}
public void Draw(Graphics g)
{
System.out.println(g);// 测试语句,可打印出;
System.out.println(l1+","+l2+","+l3+","+l4);// 测试语句,可打印出;
g.drawRect(l1,l2,l3,l4);
System.out.println("1111");
}
}
public class draw implements ActionListener
{
int i1, i2,i3,i4;
Frame f=new Frame("drawing");
TextField tf1=new TextField(5);
TextField tf2=new TextField(5);
TextField tf3=new TextField(5);
TextField tf4=new TextField(5);
Button b=new Button("我画");
SubPanel sp;
public draw()
{
f.add(tf1);
f.add(tf2);
f.add(tf3);
f.add(tf4);
f.add(b);
f.pack();
b.addActionListener(this);
f.setLayout(new FlowLayout());
f.setSize(400,500);
f.setBackground(new Color(89,145,145));
f.setForeground(new Color(0,0,255));
f.setVisible(true);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
}
public void actionPerformed(ActionEvent e)
{
i1=Integer.parseInt(tf1.getText());
i2=Integer.parseInt(tf2.getText());
i3=Integer.parseInt(tf3.getText());
i4=Integer.parseInt(tf4.getText());
sp=new SubPanel(i1,i2,i3,i4);
System.out.print(i1+" "+i2+" "+i3+" "+i4);// 测试语句,//可打印出;
f.add(sp);
Graphics g=sp.getGraphics();
sp.Draw(g);
System.out.println("222");// 测试语句,可打印出;
}
public static void main(String args[])
{
draw d=new draw();
System.out.println("555");// 测试语句,可打印出;
}
}
|
你把sp加到Frame上之后,用Draw绘制了直线,但是这个actionPerformed执行之后,会触发Frame调用repaint(), 再触发sp调用repaint(), 就清空了你绘制的直线。所以你把Draw方法换成paint, 调用的时候直接repaint()试试。
|
1.看一下关于布局管理器。
f.setLayout(new FlowLayout());
你的Frame用的是FlowLayout,当你添加sp时,它是以默认尺寸,顺序加入到了父容器中
2.在panel上画图,应该重载paint()方法。
f.setLayout(new FlowLayout());
你的Frame用的是FlowLayout,当你添加sp时,它是以默认尺寸,顺序加入到了父容器中
2.在panel上画图,应该重载paint()方法。
|
我试了一下,可能是不能在运行期间再往frame加panel了,
所以你那个panel没加上去,你其实可以先把它加上去呀,
所以你那个panel没加上去,你其实可以先把它加上去呀,
|
楼上的说得对,光重载一个draw()是不行的,还要写paint()(其实主要是要重载repaint()的行为,缺省repaint()调用paint(),所以要重载paint())
|
to:asdmonster(asd)
我照得的方法做了还是不行啊
有哪位做好了请帖出源代码啊
我照得的方法做了还是不行啊
有哪位做好了请帖出源代码啊
|
试试看....我也很菜,楼主不用太期待
|
是不是g.setColor(Color.XXX)
设置一个颜色
设置一个颜色
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。