本帖最后由 xinpet 于 2010-04-04 08:30:32 编辑

解决方案 »

  1.   

    把JFrame改成JDialog,然后用setModal(true)堵塞main线程
    否则
    Pa pa=new Pa();
    //我想在这里得到窗体中点击确定后新输入的文本内容,应该怎么办?
    pa.getKk(); //你还没来得及输入这里就已经被执行了
      

  2.   

    线程堵住了,JButton又不能用了...,怎么才能使JButton能继续用呀?
      

  3.   

    如果JButton是在JDialog上的话,不可能不能用。
    Modal窗体只是堵塞线程,直到窗体关闭线程才继续往下执行,但窗体上的控件都是可用的。
    肯定是你的代码有问题
      

  4.   


    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    public class Pa {
        private String kk;
        public Pa(){
         try {
         final JDialog jf=new JDialog();
         jf.setModal(true);
            JPanel jp=new JPanel();         jf.setSize(400, 400);
            
            JLabel jl=new JLabel("传递的参数为:");
            final JTextField jtf=new JTextField(10);
            
            JButton jb=new JButton("传递");
            
            jp.add(jl);
            jp.add(jtf);
            jp.add(jb);
            jf.add(jp);
            jf.setVisible(true);
            jf.setResizable(false);
            jb.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    setKk(jtf.getText());
         jf.setModal(false);
                    jf.dispose();
                }
            });
    } catch (Exception e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }    }
        public String getKk() {
            return kk;
        }
        public void setKk(String kk) {
            this.kk = kk;
        }
    }
      

  5.   

    不如采用观察者模式
    public class MainClass implements java.util.Observer{
    private BufferedReader br;
    private static int count = 0;
    public void update(Observable observable, Object arg) {
    if(observable instanceof Pa) {
    System.out.println("aa");
    System.out.println(((Pa)observable).getKk());
    }
    }
    //public  void takeList(ArrayList<? super javax.swing.JButton > list){list.add(new javax.swing.JButton());list.get(0);}
    public static void main(String []args) throws Exception{
    MainClass m = new MainClass();
    Pa pa = new Pa();
    pa.addObserver(m);
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    public class Pa extends java.util.Observable{
        private String kk;
        public Pa(){
            final JFrame jf=new JFrame("窗体参数测试");
            JPanel jp=new JPanel();
            
            jf.setSize(400, 400);
            
            JLabel jl=new JLabel("传递的参数为:");
            final JTextField jtf=new JTextField(10);
            
            JButton jb=new JButton("传递");
            
            jp.add(jl);
            jp.add(jtf);
            jp.add(jb);
            jf.add(jp);
            jf.setVisible(true);
            jf.setResizable(false);        jb.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    setKk(jtf.getText());
                    //getKk();
    //                javax.swing.SwingUtilities.invokeAndWait(arg0)
                    jf.dispose();
                }
            });
        }
        public String getKk() {
            return kk;
        }
        public void setKk(String kk) {
         this.kk = kk;
         setChanged();
         notifyObservers();
        }
        
    }