2012-05-24 24 views
1

我已经创建了一个框架并将图像显示在框架中。但我无法设置框架的大小。正如我已经试过下面的代码,但它给我的图像部分我已经设置,而不是整个图像。请帮我重新调整图像大小。java:如何调整包含图像的框架的尺寸

JFrame frame = new JFrame("My Window"); 
frame.setSize(200,200); 
int frameWidth = 200; 
int frameHeight = 200; 
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setBounds((int) screenSize.getWidth() - frameWidth, 0, frameWidth, frameHeight); 
frame.pack(); 
frame.setVisible(true); 
+0

您是否尝试过使用带有不同参数的.setSize()方法? – Ewald

+0

我只尝试过.setSize(height,width)方法。除此之外还有其他方法吗? – Anjali

+0

如何发布整个应用程序,以便我们了解如何添加图像等。我们可能能够找到可帮助您的东西? – Ewald

回答

3

你混合absolute positioninglayout managers使用。 当您拨打setSize()setBounds()时,您正在使用绝对布局,即您手动管理组件的大小和位置。

当您致电pack()时,您将调整大小和定位委托给框架内组件的布局管理器。 LayoutManager根据组件的首选/最小/最大尺寸和约束来确定组件的位置和大小。查看所有关于LayoutManager的here

我会建议依靠LayoutManagers,因为它可以在不同的平台上更好地工作,并且您的代码会更干净。

3
package test.t100.t004; 

import java.awt.Image; 
import java.net.URL; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 

public class ImageSizedGUI { 

    ImageSizedGUI(Image image) { 
     JLabel label = new JLabel(new ImageIcon(image)); 

     JFrame f = new JFrame("Image"); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     // either this, or.. 
     f.setContentPane(new JScrollPane(label)); 

     f.pack(); 
     // ..this, but could produce undesirable results for images 
     // that are larger than screen size! 
     // f.setMinimumSize(f.getSize()); 
     f.setLocationByPlatform(true); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) throws Exception { 
     String address = (args.length>0 ? args[0] : 
       "http://pscode.org/media/stromlo2.jpg"); 
     URL url = new URL(address); 
     final Image image = ImageIO.read(url); 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new ImageSizedGUI(image); 
      } 
     }); 
    } 
}