Java Canvas无法正确调整大小

时间:2015-10-11 15:50:23

标签: java swing

我必须编制一个精确分辨率为128x128的游戏,但Canvas不想匹配。

if ($(window).scrollTop() >= top) {

    nav.addClass('navbar-fixed-top');
    body.addClass('padding-fifty');
    $('.navbar-brand').addClass('visible');

} else {
    nav.removeClass('navbar-fixed-top');
    body.removeClass('padding-fifty');
    $('.navbar-brand').removeClass('visible');
}

Canvas的大小(getWidth(),getHeight)是134 * 128的128 * 128的实例..

2 个答案:

答案 0 :(得分:1)

我认为getHeight将返回134.那就是。是窗口的标题。 Jframe显然是更大的部分吗?

答案 1 :(得分:0)

  1. 不要打电话给你的班级窗口。有一个使用该名称的AWT组件,因此非常混乱。类名应该更具描述性。

  2. 不要扩展Canvas。使用Swing时,您可以扩展JComponent或JPanel以进行自定义绘制。

  3. 不要在班级中创建框架。框架不是该类的属性,不属于该属性。

  4.   

    我必须编制一个精确分辨率为128x128

    的游戏

    在Windows上适合我。

      

    它绝对是getWidth(),

    框架的最小宽度。框架必须能够绘制标题栏和左/右边框中的所有按钮。

    所以我猜想因为你使用的是BorderLayout,所以框架的大小调整到最小,然后根据布局管理器的规则调整自定义类的大小。

    因此,如果您希望尊重面板的首选大小,请在框架上尝试不同的布局管理器。例如,使用FlowLayout,它将遵循添加到其中的任何组件的大小。

    简单示例:

    import java.awt.*;
    import javax.swing.*;
    
    public class GamePanel extends Canvas
    {
        public GamePanel()
        {
            setBackground( Color.RED );
        }
    
        @Override
        public Dimension getPreferredSize()
        {
            return new Dimension(128, 128);
        }
    
        private static void createAndShowGUI()
        {
            GamePanel panel = new GamePanel();
    
            JFrame frame = new JFrame("GamePanel");
            frame.setLayout( new FlowLayout() );
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(panel);
            frame.setLocationByPlatform( true );
            frame.pack();
            frame.setVisible( true );
            System.out.println(panel.getSize());
            System.out.println(frame.getSize());
        }
    
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }