当前位置:编程学习 > JAVA >>

请问如何在某个JDialog窗口重新被激活时执行动作(就是问,应该是WindowListener哪种事件起作用?)

具体情况是这样的:我的一个JDialog窗口中有个表格,其表格内容是读取文件中的来初始化。

然后我在这个JDialog窗口,点击一个按钮,进入另一个附属于它的JDialog窗口。在这个新弹出的JDialog窗口中是对文件的操作

所以,我要实现,当写完文件,退出这个最新弹出的JDialog窗口后,在原来的JDialog窗口重新变为活动窗口时,执行下刷新,重新根据编辑过的文件的内容来填写表格内容


问题是,这个属于windowListener中的哪种事件起作用??不应该是获得焦点windowGainedFocus吧,这样的话不就应该成了只要窗口激活中,就不断执行吧?

也不会是windowsActivated吧??

请提供解决方案

————————————

另外,一个朋友给出的方案是说在Dialog中添加JPanel,说是JPanel有RePaint方法,但具体怎么用不知道

不过最好请提供其他方法,因为我这个布局已经弄好了,也不太适合用jpanel,因为还有listbox等 --------------------编程问答-------------------- 根据你的说法,我觉得用 WINDOW_GAINED_FOCUS 就已经能很好的满足你的要求了。 --------------------编程问答--------------------
引用 1 楼  的回复:
根据你的说法,我觉得用 WINDOW_GAINED_FOCUS 就已经能很好的满足你的要求了。


实现不了,试过了。

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

不应该是这个监视器 --------------------编程问答-------------------- 用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);
}
}
--------------------编程问答-------------------- 用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);
}
}
--------------------编程问答-------------------- 不行呀,我也是这么做的。唯一区别是:

我是建立了内部类 ,然后给jdialog注册了这个内部类的监视器

class XXX extends WindowAdapter
{
public void windowGainedFocus(WindowEvent e)
     {
    
     System.out.println("111");
     }
}


但我运行程序,切换窗口根本出不了 111
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,