Java小程序将剪辑绘制为[195200]大小 意图

Java小程序将剪辑绘制为[195200]大小 意图,java,eclipse,canvas,applet,clip,Java,Eclipse,Canvas,Applet,Clip,我有一个java.applet.applet子类MyApplet,其中添加了java.awt.Canvas子类MyCanvas 我的代码将MyApplet的大小更改为new Dimension(600400),并将MyCanvas的大小更改为匹配 当MyCanvas是painted时,它应该 用红色填充其整个区域 画一个宽度为300、高度为300的蓝色圆圈 问题 相反(当作为Eclipse中的Java小程序运行时),MyCanvas的绘制区域比600400小得多(我测量为195200),即使My

我有一个
java.applet.applet
子类
MyApplet
,其中添加了
java.awt.Canvas
子类
MyCanvas


我的代码将
MyApplet
的大小更改为
new Dimension(600400)
,并将
MyCanvas
的大小更改为匹配

MyCanvas
paint
ed时,它应该

  • 红色填充其整个区域
  • 画一个宽度为300、高度为300的蓝色圆圈
  • 问题 相反(当作为Eclipse中的Java小程序运行时),
    MyCanvas
    的绘制区域比600400小得多(我测量为195200),即使
    MyApplet
    的大小调整正确

    打印出来的也没问题——见文章底部

    代码 这是我的代码:

    import java.applet.Applet;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;
    
    public class MyApplet extends Applet {
    
        Canvas mainCanvas;
    
        public void init() {
    
            // Set the size of the applet
            setSize(600, 400);
    
            // Print dimensions
            System.out.println("Applet dimensions: " + getSize());
    
            // Make a canvas with the same sizes as this applet
            mainCanvas = new MyCanvas(getWidth(), getHeight());
            add(mainCanvas);
        }
    
        public class MyCanvas extends Canvas {
    
            public MyCanvas(int w, int h) {
    
                setSize(w, h);
    
                System.out.println("Canvas dimensions: " + getSize());
            }
    
            public void paint(Graphics g) {
    
                g.setColor(Color.RED);
                System.out.println("Canvas dimensions when painting: " + getSize());
                g.fillRect(0, 0, getWidth(), getHeight());
            }
        }
    }
    
    打印输出 它生成以下打印输出:

    Applet dimensions: java.awt.Dimension[width=600,height=400]
    Canvas dimensions: java.awt.Dimension[width=600,height=400]
    Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]
    Canvas dimensions when painting: java.awt.Dimension[width=600,height=400]
    
    整个尺寸都是正确的

    尝试的解决方案
    • 我在
      MyApplet
      MyCanvas
      中尝试了
      setBounds()
      而不是
      setSize()
      ,以防位置偏移到左上角。这只是改变了圆圈的位置——剪辑仍然存在

    我遗漏了什么吗?

    您想调用
    setPreferredSize
    ,并在初始化的第一行中解释差异,请输入以下内容:

    setLayout(new GridLayout(1,1));   
    
    这将导致画布占用小程序的所有空间。

    终于找到了它

    Eclipse提供给小程序的环境默认配置为大小为200200。除非更改了默认运行配置,否则所有绘制剪辑都将保留在此区域

    这可以通过以下方式完成:

  • 在包视图中右键单击小程序的根文件夹
  • 选择运行方式…->运行配置
  • 单击“参数”选项卡
  • 根据需要更改宽度和高度字段

  • setPreferredSize
    让事情变得更糟——现在
    MyApplet
    的大小调整到小剪辑的大小!另外,您链接到的线程说,当我没有设置布局管理器时,使用
    setSize
    而不是
    setPreferredSize
    ,这里就是这种情况。@Aku:“…我没有设置布局管理器…”您可能没有设置布局管理器,但有一个默认设置。将其作为
    init()
    方法的第一行来证明:
    System.out.println(getLayout())@Andrew,这是真的。感谢您的澄清。“我的代码更改了
    MyApplet
    ”的大小。如果您能找到一个根据Java代码调整applet大小的浏览器,我会找到两个不会。我知道。这是测试用的。我不想每次测试applet时都重新编写代码并打开浏览器。即使我真的很麻烦,我也不能使用调试器。没有改变。我开始认为这是Eclipse的小程序环境的问题。