如何监听窗口变大变小以后的事件,而不是窗口变大变小时事件,我要把画面上的控件居中表示,得在窗口变大变小以后才知道窗口大小,以便调整画面上的控件布局,
或有别的方法让窗口上的控件居中表示吗

解决方案 »

  1.   

    明白了,你要在窗口变化后重画控件,你可以得到窗体的大小,然后重新计算控件的位置。重写paint方法。
      

  2.   

    JFrame frame = new JFrame();
    Container content = frame.getContentPane();
    content.setLayout(new GridBagLayout());
    JButton btn = new JButton("Center");
    content.add(btn, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstriants.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));窗口变不变和你没有关系, 按钮总是居中的.
    布局的问题可以灵活使用Swing的布局管理器, 实在不行可以重写Layout, 不要去捕捉ComponentEvent(不要使用ComponentListener)
      

  3.   

    不行就用:cp.setLayout(null);
             控件.setBounds(x,y,width,height);
    如果控件都是来自于同一个类,那么就再另外定义一个类,如(Point控件)这样一个类,我设计四国时,就这样做的
             
      

  4.   

    我用的是类WindowAdapter的
    public void windowStateChanged(WindowEvent e)的方法,可是它是窗口状态改变‘时’调用的,
    而我要的是窗口状态改变‘后’调用,
    如何实现?
      

  5.   

    我想你应该覆盖doLayout方法,或者自己写个布局管理器,让所有的控件居中,布局管理器作的就是这件事,不管窗口如何变化,都要调用布局管理器执行,Java使用Callback方法布局控件
      

  6.   

    能否提供一个有多个控件的JFrame 的布局管理器的例子
      

  7.   

    你在一个JPanel上放置所有控件,然后在JFrame中使用下边的这个布局管理器添加你的JPanel:import java.awt.*;
    import java.io.*;public class CenterLayout implements LayoutManager, Serializable {
        public void addLayoutComponent(String name, Component comp) { }
        public void removeLayoutComponent(Component comp) { }    public Dimension preferredLayoutSize( Container container ) {
    Component c = container.getComponent( 0 );
    if ( c != null ) {
                Dimension size = c.getPreferredSize();
                Insets insets = container.getInsets();            return new Dimension(size.width + insets.left + insets.right,
                                     size.height + insets.top + insets.bottom);
    }
    else {
        return new Dimension( 0, 0 );
    }
        }    public Dimension minimumLayoutSize(Container cont) {
         return preferredLayoutSize(cont);
        }    public void layoutContainer(Container container) {
            if (container.getComponentCount() > 0) {
                Component c = container.getComponent(0);
                Dimension pref = c.getPreferredSize();
                int containerWidth = container.getWidth();
                int containerHeight = container.getHeight();
                Insets containerInsets = container.getInsets();            containerWidth -= containerInsets.left +
                                  containerInsets.right;
                containerHeight -= containerInsets.top +
                                   containerInsets.bottom;            int left = (containerWidth - pref.width) / 2 +
                                containerInsets.left;
                int right = (containerHeight - pref.height) / 2 +
                                containerInsets.top;            c.setBounds(left, right, pref.width, pref.height);
            }
        }
    }
      

  8.   

    你把所有组件放在一个Panel里面, 然后按我写得layout设置panel不就行了?
      

  9.   

    bradwoo8621() 
       你把所有组件放在一个Panel里面, 然后按我写得layout设置panel不就行了?
      
     我用了,窗口上变得什么也没有了???
      

  10.   

    content.add(btn, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstriants.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));解决