Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置窗口内部区域的大小_Java_Swing - Fatal编程技术网

Java 设置窗口内部区域的大小

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

我有一个简单的函数,可以生成包含图像的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 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正如我刚才所说的,它可能有一些问题,因为这是我首先做的。问题在于代码,而不是方法。如果您有一个问题中未提及的特殊要求,请说明该要求,否则为什么要重新发明车轮?