这是我的代码:
public class JJD extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public JJD() {
super("test");
JPanel center = new JPanel();
center.setBackground(Color.red);
JScrollPane pane = new JScrollPane(center);
this.getContentPane().add(pane, BorderLayout.CENTER);
final JFrame fr = this;
this.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowLostFocus(WindowEvent arg0) {
// TODO Auto-generated method stub
if (fr.isValid()) {
System.out.println("FOCUS VALID!");
} else {
System.out.println("Focus INVALID");
}
}
@Override
public void windowGainedFocus(WindowEvent arg0) {
// TODO Auto-generated method stub
}
});
this.setVisible(true);
this.setSize(500, 500);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame fr = new JJD();
fr.validate();
}
}
你能告诉我为什么听众打印出我的画面无效吗?我还尝试了其他方法,例如pack()
revalidate()
,但是,侦听器打印出我的帧无效。
提示:问题是因为JScrollPane
,但我无法弄清楚如何使我的框架有效。
答案 0 :(得分:2)
我认为可能是因为你没有覆盖windowsGainedFocus方法。
public void windowGainedFocus(WindowEvent arg0) {
if (fr.isValid()) {
System.out.println("FOCUS VALID!");
} else {
System.out.println("Focus INVALID");
}
}
您可以像其他一样覆盖它,看看它是否有效。如果它不起作用,您可以在else子句中添加fr.validate()
方法调用。我希望它会有所帮助。