帮你顶,学习。随便问一下高手,WindowAdapter中的windowStateChanged,为什么没有监控
jframe的大小变化?windowStateChanged到底在什么情况下才会触发?
import javax.swing.*;
import java.awt.event.*;class MinFrame {
private final static int minWidth=200;
private final static int minHeigth=200; public static void main(String[] args) {
final JFrame frame=new JFrame();
frame.setSize(300,300);
frame.show();

frame.addWindowListener(new WindowAdapter(){

public void windowStateChanged(WindowEvent e) {
System.out.println("change");
if (frame.getWidth()<minWidth){
frame.setSize(minWidth,frame.getHeight());
}

if (frame.getHeight()<minHeigth){
frame.setSize(frame.getWidth(),minHeigth);
}

}

public void windowClosing(WindowEvent e) {

System.exit(0);

}


}



);
}


}

解决方案 »

  1.   

    JFrame本身没有最小设置,对JPanel所用的setMinimumSize方法要配合布局才能发挥作用,你可以给JFrame加一个监听,当JFrame的长或宽小于某个数字后就强行把它设置到最小尺寸,WindowListener只能监听窗口的激活、关闭、请求关闭、失去激活状态、恢复、最小、打开,而不能监听大窗体大小的改变。ComponentListener可以监听到组件被隐藏、被移动、大小的改变、组件被显示,可满足你的需要。<------ 树欲静而风不止 ------>
      

  2.   

    得到mq612的提示:实现了,代码如下:
    package com.topirol.test.swing;import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;class MinFrame {
    public static void main(String[] args) {
    final JFrame frame=new JFrame();
    frame.setSize(300,300);
    frame.show();
    frame.addComponentListener(new ResizeLister(frame));

    frame.addWindowListener(new WindowAdapter(){


    public void windowClosing(WindowEvent e) {

    System.exit(0);

    }


    }

    );
    }


    }class ResizeLister implements ComponentListener{
    private final static int minWidth=200;
    private final static int minHeigth=200;
    private JFrame frame;

    ResizeLister(JFrame frame){
    this.frame=frame;
    }


    public void componentResized(ComponentEvent e){
        
    //System.out.println("change");
    if (frame.getWidth()<minWidth){
    frame.setSize(minWidth,frame.getHeight());
    }

    if (frame.getHeight()<minHeigth){
    frame.setSize(frame.getWidth(),minHeigth);
    }

        
        
    }   
        public void componentMoved(ComponentEvent e){}    public void componentShown(ComponentEvent e){}    public void componentHidden(ComponentEvent e){}
    }