在线等待!急!多谢!一个画图的程序,输入两个坐标值,以此为对角线顶点坐标做矩形。。。高手给看看。 我试了一下,可能是不能在运行期间再往frame加panel了,所以你那个panel没加上去,你其实可以先把它加上去呀, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.看一下关于布局管理器。f.setLayout(new FlowLayout());你的Frame用的是FlowLayout,当你添加sp时,它是以默认尺寸,顺序加入到了父容器中2.在panel上画图,应该重载paint()方法。 你把sp加到Frame上之后,用Draw绘制了直线,但是这个actionPerformed执行之后,会触发Frame调用repaint(), 再触发sp调用repaint(), 就清空了你绘制的直线。所以你把Draw方法换成paint, 调用的时候直接repaint()试试。 楼上的说得对,光重载一个draw()是不行的,还要写paint()(其实主要是要重载repaint()的行为,缺省repaint()调用paint(),所以要重载paint()) 把draw()改成paint(),再把sp.draw(g)改成sp.repaint()编译运行,发现还是不行啊,并且发现这两句System.out.println(g);// 测试语句,可打印出;System.out.println(l1+","+l2+","+l3+","+l4);// 测试语句,可打印出没有执行,也就是说repaint没有触发paint(),是怎么回事啊? to:asdmonster(asd) 我照得的方法做了还是不行啊有哪位做好了请帖出源代码啊 是不是g.setColor(Color.XXX)设置一个颜色 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 paint(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() { // 这里修改了一下 Panel top = new Panel(); top.add(tf1); top.add(tf2); top.add(tf3); top.add(tf4); top.add(b); f.setLayout(new BorderLayout()); f.add(top, BorderLayout.NORTH); //f.add(sp = new //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, BorderLayout.CENTER); f.doLayout(); // 调用doLayout重新布局,否则sp的宽高都是0 f.repaint(); sp.repaint(); System.out.println("222");// ???嬪丆壜懪報弌丟 } public static void main(String args[]) { draw d=new draw(); System.out.println("555");// ???嬪丆壜懪報弌丟 } } 问个关于JTextArea和JScrollPane的问题 请教关于java类间调用的问题 如何存下俩个大数相乘的结果?急 菜鸟求教:关于接口的问题 JNI 问题 如何判断字符串是哪种编码方式 这是为什么????总得到NULL 一个较难解决的数据库插入问题 请问用dispose方法退出窗体和用System.exti(0)退出有何区别,谢谢 JAVA可以在什么系统运行。 请问JAVA如何执行(调用)操作系统命令,如dir,然后把执行结果存入变量或文件,谢谢! paint () and Paintcomponent()
f.setLayout(new FlowLayout());
你的Frame用的是FlowLayout,当你添加sp时,它是以默认尺寸,顺序加入到了父容器中
2.在panel上画图,应该重载paint()方法。
System.out.println(g);// 测试语句,可打印出;
System.out.println(l1+","+l2+","+l3+","+l4);// 测试语句,可打印出
没有执行,也就是说repaint没有触发paint(),是怎么回事啊?
我照得的方法做了还是不行啊
有哪位做好了请帖出源代码啊
设置一个颜色
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 paint(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()
{
// 这里修改了一下
Panel top = new Panel();
top.add(tf1);
top.add(tf2);
top.add(tf3);
top.add(tf4);
top.add(b);
f.setLayout(new BorderLayout());
f.add(top, BorderLayout.NORTH);
//f.add(sp = new
//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, BorderLayout.CENTER);
f.doLayout();
// 调用doLayout重新布局,否则sp的宽高都是0
f.repaint();
sp.repaint();
System.out.println("222");// ???嬪丆壜懪報弌丟
}
public static void main(String args[])
{
draw d=new draw();
System.out.println("555");// ???嬪丆壜懪報弌丟
}
}