我想编写一个简单的应用程序,其中框架显示给定的图像并获取其大小。
我的问题是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
}
}
答案 0 :(得分:0)
根据Window
的{{1}}方法javadoc:
使此窗口的大小适合其子组件的首选大小和布局。如果任一维度小于上一次调用setMinimumSize方法所指定的最小大小,则会自动放大窗口的最终宽度和高度。 如果窗口和/或其所有者尚未显示,则在计算首选大小之前,它们都可显示。窗口在计算其大小后进行验证。
pack
扩展了MyFrame
,扩展了JFRame