我创建了一个框架并将图像显示在框架中。但是我无法设置框架的大小。正如我尝试了下面的代码,但它给了我设置的图像部分,而不是整个图像。请帮我重新调整图像大小。
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 :(得分:3)
您正在混合使用absolute positioning和使用layout managers。
当您致电setSize()
或setBounds()
时,您使用的是绝对布局,即手动管理组件的大小和位置。
当您致电pack()
时,您将大小调整和定位委派给框架内组件的LayoutManagers。 LayoutManager根据其首选/最小/最大大小和约束来定位和调整组件的大小。查看关于LayoutManager的here。
我建议依赖LayoutManagers,因为它可以在不同平台上运行得更好,而且代码更清晰。
答案 1 :(得分: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);
}
});
}
}