Java 设置窗口内部区域的大小
我有一个简单的函数,可以生成包含图像的JFrame:Java 设置窗口内部区域的大小,java,swing,Java,Swing,我有一个简单的函数,可以生成包含图像的JFrame: //The window JFrame frame = new JFrame(); //Topmost component of the window Container main = frame.getContentPane(); //Turns out this is probably the simplest way to render image on screen //with guaranteed 1:1 aspec
//The window
JFrame frame = new JFrame();
//Topmost component of the window
Container main = frame.getContentPane();
//Turns out this is probably the simplest way to render image on screen
//with guaranteed 1:1 aspect ratio
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
};
//Put the image drawer in the topmost window component
main.add(panel);
//Set window size to the image size plus some padding dimensions
frame.setSize(image.getWidth(null)+1, image.getHeight(null)+15);
frame.setVisible(true);
结果:
我认为这是因为窗口尺寸包括顶部栏和窗口边框的大小
我还尝试设置JPanel
的大小,并在JFrame上调用pack()
:
//Set the size to the panel and let JFrame size itself properly
panel.setSize(image.getWidth(null), image.getHeight(null));
frame.pack();
结果更糟:
那么,如何精确地指定内部窗口的像素尺寸呢
通过覆盖
JPanel
的getPreferredSize
方法指定面板的首选大小,并在JFrame
上调用pack()
,然后使其可见
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
@Override
public Dimension getPreferredSize(){
return new Dimension(image.getWidth(), image.getHeight());
}
};
请参阅中关于此技术或
setPreferredSize
方法的使用和效果的答案Awesome!它可以工作,比我希望的更简单:)@TomášZato,更简单的是使用JLabel,因为它为您提供了这一功能。您可以尝试在JLabel中插入图像,这可能不会导致此问题。@ParamvirSinghKarwal我从这开始。我不知道为什么不再使用该解决方案,但我想这是有原因的。显示图像的最简单方法是使用JLabel。只有在处理图像时才进行自定义绘制。@camickr正如我刚才所说的,它可能有一些问题,因为这是我首先做的。问题在于代码,而不是方法。如果您有一个问题中未提及的特殊要求,请说明该要求,否则为什么要重新发明车轮?