java JScrollPane问题

时间:2012-04-01 09:49:26

标签: java swing jscrollpane

这是我的代码:

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,但我无法弄清楚如何使我的框架有效。

1 个答案:

答案 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()方法调用。我希望它会有所帮助。