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时,它应该
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的小程序环境的问题。