首页javalayoutJava Swing - 如何在调用setVisible()之前获取JPanel的大小

Java Swing - 如何在调用setVisible()之前获取JPanel的大小

我们想知道如何在调用setVisible()之前获取JPanel的大小。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class Main {

  public static void main(String[] args) {
    JFrame frame = new JFrame("Testing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    TestPane center = new TestPane(100, 100);
    frame.add(center);
    frame.add(new TestPane(100, 50), BorderLayout.NORTH);
    frame.add(new TestPane(100, 50), BorderLayout.SOUTH);
    frame.add(new TestPane(50, 100), BorderLayout.EAST);
    frame.add(new TestPane(50, 100), BorderLayout.WEST);

    System.out.println("Size beofre pack = " + frame.getSize() + "; "
        + center.getSize());

    frame.pack();

    System.out.println("Size after pack = " + frame.getSize() + "; "
        + center.getSize());

    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

class TestPane extends JPanel {
  int pWidth, pHeight;

  public TestPane(int width, int height) {
    pWidth = width;
    pHeight = height;
    setBorder(new LineBorder(Color.RED));
  }
  @Override
  public Dimension getPreferredSize() {
    return new Dimension(pWidth, pHeight);
  }
}