swing怎么让窗口按照原来的宽度高度比例缩放?比如,我有个窗口,这个窗口是Jframe实现的,我通过鼠标拖拉这个窗口的宽度,使宽度变宽了2倍,那么我希望这个窗口的高度也可以自动跟着变高2倍。求指点啊~~~~~~
谢谢大家~~~~~~

解决方案 »

  1.   

    addComponentListener(new ComponentAdapter(){
        @Override public void componentResized(ComponentEvent e){
            ... // 
        }
    });
      

  2.   


    这个我试过了,比如如下代码:
    addComponentListener(new ComponentAdapter(){
        @Override public void componentResized(ComponentEvent e){
           int w= MyFrame.this.getWidth();
           MyFrame.this.setSize(w,2*w);  //希望以此能保证拖拉宽度时,高度能自动保证是宽度的2倍。
        }
    });但实际效果是,在拖拉窗口宽度的当时(即保持鼠标左键不松开),高度能自动跟着变成宽度的2倍,但鼠标左键一松开,高度马上又变回去了,即高度又变回拖拉之前的高度了。
      

  3.   

    高度又变回去了,是因为操作系统的最后消息处理又把窗口高度重置了.
    你可以试试这样:
    addComponentListener(new ComponentAdapter(){
      @Override public void componentResized(ComponentEvent e){
          SwingUtilities.invokeLater(new Runnable(){
               public void run() {
                  int w= MyFrame.this.getWidth();
                  MyFrame.this.setSize(w,2*w); //希望以此能保证拖拉宽度时,高度能自动保证是宽度的2倍
               }
          });
      }
    });
      

  4.   

        public static void main(final java.lang.String[] args) {
            java.awt.EventQueue.invokeLater(new java.lang.Runnable(){
                    @Override public void run(){
                        final JFrame frame = new JFrame("Resize");
                        frame.setPreferredSize(new Dimension(600, (int)(600 * 0.618)));
                        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        frame.pack();
                        frame.addComponentListener(new ComponentAdapter(){
                                @Override public void componentResized(ComponentEvent e){
                                    frame.setPreferredSize(new Dimension(frame.getWidth(), (int)(frame.getWidth() * 0.618)));
                                    frame.pack();
                                }
                            });
                        frame.setVisible(true);
                    }
                });
        }