一个关于JDialog的问题!
时间:2008-01-16 12:57:56 来源: 作者:
|
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Text{ private JFrame jf1,jf2; private JButton b1,b2; private JTextArea jta1,jta2; private JDialog jd; private JScrollPane jsp1,jsp2; public Text(){ jf1=new JFrame("Text"); jf2=new JFrame("Frame"); b1=new JButton("Frame"); b2=new JButton("Dialog"); jta1=new JTextArea(20,15); jta2=new JTextArea(20,15); jta1.setEditable(false); jta2.setEditable(false); jsp1=new JScrollPane(jta1); jsp2=new JScrollPane(jta2); jd=new JDialog(jf1,"Dialog",true); } public void creatFrame(){ jf1.getContentPane().setLayout(new GridLayout(1,2)); jf1.getContentPane().add(b1); jf1.getContentPane().add(b2); b1.addMouseListener(new MouseAdapter(){ public void mouseReleased(MouseEvent e){ echoFrame(); jta1.setText(jta1.getText()+"Hello Frame!"); } }); b2.addMouseListener(new MouseAdapter(){ public void mouseReleased(MouseEvent e){ jta2.setText(jta2.getText()+"Hello Dialog!"); echoDialog(); } }); jf1.setSize(150,200); jf1.setVisible(true); jf1.pack(); } public void echoFrame(){ jf2.getContentPane().add(jsp1); jf2.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ jta1.setText(""); jf2.dispose(); } }); jf2.setSize(90,90); jf2.setVisible(true); jf2.pack(); } public void echoDialog(){ jd.getContentPane().add(jsp2); jd.addWindowListener(new WindowAdapter(){ public void windownClosing(WindowEvent e){ jta2.setText(""); jd.dispose(); } }); jd.setSize(150,90); jd.setVisible(true); jd.pack(); } public static void main(String args[]){ Text t=new Text(); t.creatFrame(); } } 当按Frame按钮的时候,产生一个JFrame 里面的有一句话“Hello Frame!” 关闭这个JFrame后再按这个按钮依然是这样的情况 但是当你按Dialog按钮的时候 问题出现了,第一次产生一个JDialog里面有一句话“Hello Dialog!”但是当你关闭这个Dialog后再看里面就是“Hello Dialog!Hello Dialog!”两句话了,但是我在程序里已经写明了关闭Dialog时将那个TextArea设置为空啊!而且在设置Dialog里的TextArea必须要setText,然后再产生窗口,不象Frame那样,顺序无所谓,请高手解释一下原因! sakulagi 回复于:2004-09-28 11:10:40 public void echoDialog(){ jd.getContentPane().add(jsp2); jd.addWindowListener(new WindowAdapter(){ public void [color=red]windownClosing[/color](WindowEvent e){ jta2.setText(""); jd.dispose(); } 你没发现这里拼写错误了么? crystal8034 回复于:2004-09-28 14:26:53 这个地方是写错了!呵呵!~ 不过 b2.addMouseListener(new MouseAdapter(){ public void mouseReleased(MouseEvent e){ jta2.setText(jta2.getText()+"Hello Dialog!"); echoDialog(); 为什么Dialog一定要先 setText然后在显示窗口,但是Frame就可以先显示窗口再 setText sakulagi 回复于:2004-09-29 16:01:46 引用: jd=new JDialog(jf1,"Dialog",true); 把true改成false就可以了。 sakulagi 回复于:2004-09-29 16:15:35 问题出在setVisible()这个方法上。通常这个方法上是调用show(boolean)方法,然后调用show()或是hide() 这样你的引用: jd.setVisible(true); 实际上调用了Dialog.show()这个方法(因为JDialog直接继承从Dialog了这个方法,没有覆盖它)。这样如果是一个modal dialog的话,那么Dialog.show()的javadoc说得很清楚,一直到dialog被关闭,这个show()方法都不会返回,这样你的echoDialog()方法也一直不会返回,自然也就没有调用setText()了。 解决的方法就是把jd的modal属性去掉。也就是在构造的时候,第三个参数设置成false。 crystal8034 回复于:2004-09-30 08:43:29 OK!!明白了!!高人就是厉害! |
原文链接:http://bbs.chinaunix.net/viewthread.php?tid=415687 转载请注明作者名及原文出处 |
上一篇: 请教一个关于Listener的问题
下一篇: 让我们来共同实现一个线程池(一)










文章评论
共有 位网友发表了评论 查看完整内容