java - JPanel SetPreferedSize 与实际大小不匹配

标签 java swing jpanel

我有一个我无法处理的小错误。 我将 JPanel 的大小设置为 (150,90),但 PaintComponent() 中的代码显示其大小为 (160,100)。怎么了? 感谢您的时间和帮助。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test2 extends JPanel{

    public static void main(String[] args) {

        JFrame window = new JFrame("Test");
        Test2 content = new Test2();
        window.setContentPane(content);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocation(120,70);
        window.pack();
        window.setResizable(false);
        window.setVisible(true);
    }

    Test2(){
        setBackground( new Color(0,120,0) );
        setPreferredSize( new Dimension(150, 90));
        repaint();
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor( Color.YELLOW);
        g.drawRect(0, 0, 150, 90);
        System.out.println(this.getWidth());
        System.out.println(this.getHeight());
    }
}

控制台输出表明大小为 (160,90)。黄色矩形显示相同。

最佳答案

    window.pack();
    window.setResizable(false);

应该是:

    window.setResizable(false);
    window.pack();

将窗口更改为不可调整大小会更改窗口的“ Chrome ”(外部的包装) - 它可能会变得更厚或更薄。如果我们在调用 pack 之前执行此操作,Swing 将正确处理更改后的镶边。

提示

关于java - JPanel SetPreferedSize 与实际大小不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252541/

相关文章:

java - 使用JAVA递归的二叉树查找节点方法

java - Miglayout 网格约束自定义布局

java - JScrollPane 中的 JPanel 位置

java - Realm :记录顺序已更改

java - 在firebase数据获取方法中创建无限循环

java - 我的 GUI 没有完全显示

java - 如何访问匿名内部actionListener类和actionPerformed方法中的局部变量?

java - 如何检查jPanel是否被按下?

Java - 子类中的绘制方法不起作用

java - 如何处理 Eclipse 模板的驼峰式大小写?