Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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_Jpanel_Paintcomponent - Fatal编程技术网

Java 涂漆构件大于框架

Java 涂漆构件大于框架,java,swing,jpanel,paintcomponent,Java,Swing,Jpanel,Paintcomponent,我使用相同的数字来设置框架的大小,就像我绘制矩形一样,但是图形比我的JFrame大。为什么会这样 import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Test { public static void main(String[] arguments) { Test test = new Te

我使用相同的数字来设置框架的大小,就像我绘制矩形一样,但是图形比我的JFrame大。为什么会这样

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {
    public static void main(String[] arguments) {
        Test test = new Test();
        JFrame frame = new JFrame();
        DrawPane contentPane = test.new DrawPane();
        frame.setContentPane(contentPane);
        frame.setSize(300, 400);
        frame.setVisible(true);
    }

    private class DrawPane extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            g.setColor(Color.YELLOW);
            g.fillRect(0, 0, 300, 400);
        }
    }
}

这是因为边界。这是一个很好的例子,说明了为什么不应该明确地确定
JFrame
的大小。而是从
JPanel
调用
setSize
override
getPreferredSize
方法:

private class DrawPane extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); 
            g.setColor(Color.YELLOW);
            g.fillRect(0, 0, 300, 400);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 400);
        }
    }

然后为您的
JFrame
调用
pack
,而不是
setSize
,您的
JFrame
将根据其内容调整其大小。

这是因为边框。这是一个很好的例子,说明了为什么不应该明确地确定
JFrame
的大小。而是从
JPanel
调用
setSize
override
getPreferredSize
方法:

private class DrawPane extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); 
            g.setColor(Color.YELLOW);
            g.fillRect(0, 0, 300, 400);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 400);
        }
    }

然后为您的
JFrame
调用
pack
,而不是
setSize
,您的
JFrame
将根据其内容调整其大小。

已更新。我只是复制/粘贴了他的代码并稍微编辑了一下。我的错。是的,我对同样的事情感到“内疚”。良好的编辑,删除噪音。更新。我只是复制/粘贴了他的代码并稍微编辑了一下。我的错。是的,我对同样的事情感到“内疚”。良好的编辑,噪音删除。