Pack方法调整JPanel的大小

时间:2016-04-25 22:41:58

标签: java swing

我想编写一个简单的应用程序,其中框架显示给定的图像并获取其大小。

我的问题是pack方法增加contentPane's宽度,我不确定为什么会这样。提前谢谢。

以下是代码:

public class MyFrame extends JFrame {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {

                MyFrame frame = new MyFrame();
                frame.pack();
                frame.setLocationByPlatform(true);
                frame.setVisible(true);
        }
    });
}

/**
 * Create the frame.
 */
public MyFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPane = new JPanel();
    contentPane.setBorder(null);
    contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
    MapPanel map=new MapPanel("img/strawberry.jpg");
    map.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
    contentPane.add(map);

    setContentPane(contentPane);
}

}

/**
 * My panel containing the image
 */

public class MapPanel extends JPanel {

private BufferedImage img=null;
/**
 * Create the panel.
 */
public MapPanel(String url){
        super();
        try{
            img = ImageIO.read(getClass().getResource(url));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        this.setBorder(null);
        Dimension imgsize=new Dimension(img.getWidth(),img.getHeight());
        setPreferredSize(imgsize);
        setSize(imgsize);
        setMinimumSize(imgsize);
        setMaximumSize(imgsize);

}

@Override
public void paintComponent( Graphics g ){
    super.paintComponent( g );

    Graphics2D g2=(Graphics2D)g;
    g2.drawImage(img, 0, 0, null);
}

@Override
public Dimension getPreferredSize() {
      if (img != null) {
         return new Dimension(img.getWidth(), img.getHeight());
      }
      return super.getPreferredSize(); // default
   }
}

1 个答案:

答案 0 :(得分:0)

根据Window的{​​{1}}方法javadoc:

  

使此窗口的大小适合其子组件的首选大小和布局。如果任一维度小于上一次调用setMinimumSize方法所指定的最小大小,则会自动放大窗口的最终宽度和高度。   如果窗口和/或其所有者尚未显示,则在计算首选大小之前,它们都可显示。窗口在计算其大小后进行验证。

pack扩展了MyFrame,扩展了JFRame