具体情况是这样的:我的一个JDialog窗口中有个表格,其表格内容是读取文件中的来初始化。然后我在这个JDialog窗口,点击一个按钮,进入另一个附属于它的JDialog窗口。在这个新弹出的JDialog窗口中是对文件的操作所以,我要实现,当写完文件,退出这个最新弹出的JDialog窗口后,在原来的JDialog窗口重新变为活动窗口时,执行下刷新,重新根据编辑过的文件的内容来填写表格内容
问题是,这个属于windowListener中的哪种事件起作用??不应该是获得焦点windowGainedFocus吧,这样的话不就应该成了只要窗口激活中,就不断执行吧?也不会是windowsActivated吧??请提供解决方案————————————另外,一个朋友给出的方案是说在Dialog中添加JPanel,说是JPanel有RePaint方法,但具体怎么用不知道不过最好请提供其他方法,因为我这个布局已经弄好了,也不太适合用jpanel,因为还有listbox等

解决方案 »

  1.   

    根据你的说法,我觉得用 WINDOW_GAINED_FOCUS 就已经能很好的满足你的要求了。
      

  2.   


    实现不了,试过了。我在这个jdialog中,点击插入按钮进行另一个jdialog中,能修改一个数组中元素。等我关闭这个jdialog回到原来的窗口,虽然这个窗口的 windowGainedFocus()中我写入了根据数组内容重新显示在窗口中。但完全执行不了不应该是这个监视器
      

  3.   

    用windowsActivated是可以的
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TestDialog extends JDialog
    {
    private JButton btnNewDialog = new JButton("显示新Dialog");
    private String data = "";
    private JLabel lblData = new JLabel();

    public TestDialog()
    {
    setLayout(new BorderLayout());

    lblData.setText(data);
    add(lblData, BorderLayout.NORTH);
    add(btnNewDialog, BorderLayout.SOUTH);

    btnNewDialog.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    JDialog dialog = new SubDialog();
    dialog.pack();
    dialog.setLocationRelativeTo(TestDialog.this);
    dialog.setVisible(true);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    });

    addWindowListener(new WindowAdapter()
    {
    public void windowActivated(WindowEvent event) //窗口获得焦点,重新设置数据
    {
    lblData.setText(data);
    pack();
    }
    });
    }

    private class SubDialog extends JDialog
    {
    private JTextField tf = new JTextField();
    private JButton btnOk = new JButton("确定");
    private JButton btnCancel = new JButton("取消");

    public SubDialog()
    {
    setLayout(new GridLayout(0, 2));
    add(new JLabel("数据:"));
    add(tf);
    add(btnOk);
    add(btnCancel);

    btnOk.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    data = tf.getText();
    dispose();
    }
    });
    btnCancel.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    dispose();
    }
    });
    }
    }

    public static void main(String[] args)
    {
    JDialog dialog = new TestDialog();
    dialog.pack();
    dialog.setLocationRelativeTo(null);
    dialog.setVisible(true);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    }
      

  4.   

    用windowGainedFocus也是可以的
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TestDialog extends JDialog
    {
    private JButton btnNewDialog = new JButton("显示新Dialog");
    private String data = "";
    private JLabel lblData = new JLabel();

    public TestDialog()
    {
    setLayout(new BorderLayout());

    lblData.setText(data);
    add(lblData, BorderLayout.NORTH);
    add(btnNewDialog, BorderLayout.SOUTH);

    btnNewDialog.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    JDialog dialog = new SubDialog();
    dialog.pack();
    dialog.setLocationRelativeTo(TestDialog.this);
    dialog.setVisible(true);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    });

    addWindowFocusListener(new WindowAdapter()
    {
    public void windowGainedFocus(WindowEvent event) //窗口获得焦点,重新设置数据
    {
    lblData.setText(data);
    pack();
    }
    });
    }

    private class SubDialog extends JDialog
    {
    private JTextField tf = new JTextField();
    private JButton btnOk = new JButton("确定");
    private JButton btnCancel = new JButton("取消");

    public SubDialog()
    {
    setLayout(new GridLayout(0, 2));
    add(new JLabel("数据:"));
    add(tf);
    add(btnOk);
    add(btnCancel);

    btnOk.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    data = tf.getText();
    dispose();
    }
    });
    btnCancel.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    dispose();
    }
    });
    }
    }

    public static void main(String[] args)
    {
    JDialog dialog = new TestDialog();
    dialog.pack();
    dialog.setLocationRelativeTo(null);
    dialog.setVisible(true);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    }
      

  5.   

    不行呀,我也是这么做的。唯一区别是:我是建立了内部类 ,然后给jdialog注册了这个内部类的监视器class XXX extends WindowAdapter
    {
    public void windowGainedFocus(WindowEvent e)
         {
        
         System.out.println("111");
         }
    }
    但我运行程序,切换窗口根本出不了 111