如题,有JFrame或JDialog窗口,要求窗体大小的最大值为400*300,当用鼠标改变窗口时,窗口到400*300后就不能再拖小了。
就像Windows系统自带的画图程序一样,程序窗口拖到一定大小以后就不能再变小了。

解决方案 »

  1.   

    给JFrame或JDialog添加addMouseMotionListener事件响应,在该响应里随时获取当前窗体的size,当窗口到400*300时,用setResizable()方法禁止改变窗口大小.
      

  2.   

    MouseMotionListener 不会相应窗口被托大或者托小吧。
      

  3.   

    可以给JFrame和JDialog添加ComponentListener。
    我以JFrame为例子写下:import java.awt.event.ComponentEvent;
    import java.awt.event.ComponentListener;import javax.swing.JFrame;public class JFrameResizeTest {
    public static void main(String args[]){
    MyFrame jf = new MyFrame();
    jf.setVisible(true);
    jf.setSize(500,600);
    }
    }class MyFrame extends JFrame implements ComponentListener{

    public MyFrame(){
    this.addComponentListener(this);//添加ComponentListener
    }
        
    public void componentHidden(ComponentEvent e) {

    }
    public void componentMoved(ComponentEvent e) {

    }
    public void componentResized(ComponentEvent e) {
    System.out.println(e);
    int width = e.getComponent().getWidth();
    int height = e.getComponent().getHeight(); if (width < 300) {
    width = 300;
    }
    if (height < 300) {
    height = 300;//如果这里用setResizable(false);的话,有一个问题,就是画面打开,
                                         //我就一直拖动窗口到很小,则不会窗口会停止在那个状态,而且不会再托大了。
    }
    setSize(width, height);
    }
    public void componentShown(ComponentEvent e) {

    }
    }
    这样可以实现了,JDialog一样做就可以了。
      

  4.   


    import java.awt.Dimension;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;import javax.swing.JFrame;public class JFrameResizeTest2 extends JFrame {  /**
       * Launch the application
       * @param args
       */
      public static void main(String args[]) {
        try {
          JFrameResizeTest2 frame = new JFrameResizeTest2();
          frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }  /**
       * Create the frame
       */
      public JFrameResizeTest2() {
        super();
        setBounds(100, 100, 500, 375);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setMinimumSize(new Dimension(400, 300)); // 设置最小值,这个效果比较好,比事件处理的效果好。
        this.setMaximumSize(new Dimension(800, 600)); // 不知道为什么设置最大值没效果,所以只好使用下面的事件处理。
        
        this.addComponentListener(new ComponentAdapter() {
          public void componentResized(final ComponentEvent e) {
            int width = e.getComponent().getWidth();
            int height = e.getComponent().getHeight();
            if (width > 800) {
              width = 800;
            }
            if (height > 600) {
              height = 600;
            }
            setSize(width, height);
          }
        });
      }
    }
      

  5.   

    不会吧,不可以我不会上传的啊。我的JDK6.0
      

  6.   

        谢谢xiaoduan5267 、bzwn的回答,本人JDK5.0
        所以xiaoduan5267 的方法应该是不行的了,bzwn的代码我也看了的,也不行
        实际上我只是需要Windows系统下画图程序的窗口拖动相似效果阿,以前在VC里面都很好解决的    另外,这setMinimumSize 、setMaximumSize方法貌似没什么用,设置与不设置都没效果。
        还有就是普通的增加侦听器的方法我基本上都试过,貌似都不行。
        我甚至做过覆盖paint方法,但是效果也不好(只能在鼠标松开的时候将大小设定到400*300以上)
        我想应该从processWindowEvent方法入手,但是试过两次都没效果
        灰度郁闷阿....