绘制的组件比框架大

时间:2015-08-11 14:56:35

标签: 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 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);
        }
    }
}

1 个答案:

答案 0 :(得分:5)

这是因为边界。这是一个很好的例子,为什么你不应该明确确定JFrame的大小。而是从setSize

中调用getPreferredSize覆盖JPanel方法
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);
        }
    }

然后为pack而不是JFrame致电setSizeJFrame将根据其内容调整其大小。