我写了一个类
import javax.swing.*;
import java.awt.*;
public class CFrame extends JFrame{
public CFrame(final String title){
super(title);
}
public void centerOnScreen(){
  Dimension displaySize=getToolkit().getScreenSize();
  Dimension windowSize=getSize();
  int x=(displaySize.width-windowSize.width)/2;
  int y=(displaySize.height-windowSize.height)/2;
  if(x<0) {
  x=0;
  }
  if(y<0){
  y=0;
  }
  setLocation(x,y);
  }
}但是发现其中Dimension windowSize=getSize();没有起作用,windowSize.width和windowSize.height都是0,JFrame对象只是其左上角在screen中央,怎么回事啊?????
还有没有什么其他方法可以获得JFrame对象的size????????
这是测试类
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class TryCFrame extends JFrame{
   public static void main(String[] args){
    CFrame fr=new CFrame("Try");
    fr.centerOnScreen();
    fr.setResizable(false);
fr.setSize(230,280);
fr.setVisible(true);
fr.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
   }
}

解决方案 »

  1.   

    先设置窗体的size然后再获得.窗体默认size为(0,0).
    import javax.swing.*;
    import java.awt.*;
    public class CFrame extends JFrame{
    public CFrame(final String title){
    super(title);
    }
    }
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.*;
    import java.awt.*;
    public class TryCFrame extends JFrame{
       public static void main(String[] args){
        CFrame fr=new CFrame("Try");
       
        fr.setResizable(false);
    fr.setSize(230,280);
             Dimension displaySize=fr.getToolkit().getScreenSize();
                Dimension windowSize= fr.getSize();
             int x=(displaySize.width-windowSize.width)/2;
             int y=(displaySize.height-windowSize.height)/2;
              if(x<0) {
              x=0;
              }
              if(y<0){
               y=0;
              }
              fr.setLocation(x,y); fr.setVisible(true);
    fr.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
       }
    }
      

  2.   

    这样的话实际上
    import javax.swing.*;
    import java.awt.*;
    public class CFrame extends JFrame{
    public CFrame(final String title){
    super(title);
    }
    }
    就没有用了,我如果很多类都要centerOnScreen的话就要在每个类中写方法,而我是想写一个centerOnScreen类,以后直接调用就行了。