当前位置: 代码迷 >> Java相关 >> 在这个awt程序中,我怎么才能在main()方法中调用paint()方法?
  详细解决方案

在这个awt程序中,我怎么才能在main()方法中调用paint()方法?

热度:268   发布时间:2006-05-06 17:50:00.0
在这个awt程序中,我怎么才能在main()方法中调用paint()方法?

程序如下:
import java.awt.*;
class SetF extends Frame{
public static void main(String argv[]){
SetF s=new SetF();

TextField tf1, tf2, tf3, tf4;

tf1 = new TextField();

tf2 = new TextField("", 20);

tf3 = new TextField("Hello!");

tf4 = new TextField("Hello", 30);
Panel p=new Panel();
p.add(tf1);
p.add(tf2);
p.add(tf3);
p.add(tf4);
s.add(p);
s.setSize(300,400);
s.setBackground(Color.pink);
s.setVisible(true);
s.repaint();//我这样调用,但是不行,“Dolly”没有显示出来。
}
public void paint(Graphics g){
g.drawString("Dolly",50,10);
}
}

怎么才能让paint()中的内容也显示出来呢?

[此贴子已经被作者于2006-5-6 17:52:22编辑过]

搜索更多相关的解决方案: awt  paint  main  TextField  add  

----------------解决方案--------------------------------------------------------

这还真没碰到过。不过将组件都改为Swing组件倒是可以
import java.awt.*;
import javax.swing.*;
class SetF extends JFrame
{
public static void main(String argv[])
{
SetF s=new SetF();

JTextField tf1, tf2, tf3, tf4;

tf1 = new JTextField();

tf2 = new JTextField("", 20);

tf3 = new JTextField("Hello!");

tf4 = new JTextField("Hello", 30);
JPanel p=new JPanel();
p.add(tf1);
p.add(tf2);
p.add(tf3);
p.add(tf4);
s.add(p);
s.setSize(300,400);
s.setBackground(Color.pink);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
s.repaint();
s.setVisible(true);
//我这样调用,但是不行,“Dolly”没有显示出来。
}
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.magenta);
g.drawString("Dolls",100,100);
}
}


----------------解决方案--------------------------------------------------------

不是没有显出来 而是被覆盖了 因为Frame默认流式布局
我改了一下:
import java.awt.*;
class SetF extends Frame{
public static void main(String argv[]){
SetF s=new SetF();

TextField tf1, tf2, tf3, tf4;

tf1 = new TextField();

tf2 = new TextField("", 20);

tf3 = new TextField("Hello!");

tf4 = new TextField("Hello", 30);
Panel p=new Panel();
s.setLayout(new BorderLayout());//设定布局为边界布局
p.add(tf1);
p.add(tf2);
p.add(tf3);
p.add(tf4);
s.add(p,"North"); //添加在上面
s.setSize(300,400);
s.setBackground(Color.pink);
s.setVisible(true);
s.repaint();
}
public void paint(Graphics g){
g.drawString("Dolly",100,100);
}
}


----------------解决方案--------------------------------------------------------
以下是引用★王者至尊★在2006-5-6 22:47:00的发言:

不是没有显出来 而是被覆盖了 因为Frame默认流式布局
我改了一下:
import java.awt.*;
class SetF extends Frame{
public static void main(String argv[]){
SetF s=new SetF();

TextField tf1, tf2, tf3, tf4;

tf1 = new TextField();

tf2 = new TextField("", 20);

tf3 = new TextField("Hello!");

tf4 = new TextField("Hello", 30);
Panel p=new Panel();
s.setLayout(new BorderLayout());//设定布局为边界布局
p.add(tf1);
p.add(tf2);
p.add(tf3);
p.add(tf4);
s.add(p,"North"); //添加在上面
s.setSize(300,400);
s.setBackground(Color.pink);
s.setVisible(true);
s.repaint();
}
public void paint(Graphics g){
g.drawString("Dolly",100,100);
}
}


那它是怎么被覆盖的,或者说是被谁给覆盖了呢?
谢谢!


----------------解决方案--------------------------------------------------------
被你添加的Panel 覆盖了
----------------解决方案--------------------------------------------------------
以下是引用★王者至尊★在2006-5-7 22:54:00的发言:
被你添加的Panel 覆盖了

那能不能让paint()方法直接在Panel上画呢?如果可以,语句要怎么写?


----------------解决方案--------------------------------------------------------
用p.repaint()啊
----------------解决方案--------------------------------------------------------
我是这样用的,但是Dolly没显示出来呀。
----------------解决方案--------------------------------------------------------
不会的  我这边都显出来了
----------------解决方案--------------------------------------------------------
如果是s.add(p,"North"); ,那我p.repaint();能显示出来;但是如果是s.add(p),那还是显示不出来。

既然是被panel覆盖了,那我添加到panel上不应该显示不出来的呀?
----------------解决方案--------------------------------------------------------
  相关解决方案