import java.applet.Applet;
import java.awt.*;
public class ShadowApplet extends Applet
{
public void paint (Graphics page)
{
setBackground (Color.white);
page.setColor(Color.black);
int x[]={1,1,4,4};
int y[]={1,4,1,4};
page.fillPolygon(x,y,x.length);
}
}
我必须使用上述格式的代码绘制一个复杂的图像,除了我的数组有数百和数百个点,我有几十个多边形。随着我的第26个多边形的输入,我的Java小程序将不再编译说我的代码太大了。我该如何解决这个问题?
答案 0 :(得分:1)
首先将代码分解为可重复使用的块
例如,您可以尝试将坐标保持在一个或多个多维数组中......
int[][] xPoints = {{1,1,4,4}, {...}};
int[][] yPoints = {{1,4,1,4}, {...}};
然后使用for-loop
绘制它们......
for (int index = 0; index < xPoints.length; index++) {
int[] x = xPoints[index];
int[] y = yPoints[index];
page.fillPolygon(x,y,x.length);
}
现在,我不知道,但随着元素数量的增加,这很难管理......
另一个想法可能是创建一个简单的“助手”类,专注于管理单个元素......
你可以从一个简单的界面开始,它只知道如何绘制自己,例如......
public interface PolyPainter {
public void paint(Graphics g);
}
创建实现,它们是整个...的自包含部分。
public class PolyHelper implements PolyPainter {
private int[] xPoints;
private int[] xPoints;
public PolyHelper() {
}
public PolyHelper(int[] xPoints, int[] yPoints) {
this.xPoints = xPoints;
this.yPoints = yPoints;
}
public void paint(Graphics g) {
if (xPoints != null & yPoints != null) {
g.fillPolygon(xPoints, yPoints , xPoints.length);
}
}
}
然后你可以根据需要创建每个实例......
PolyHelper helper = new PolyHelper(new int[]{1,1,4,4}, new int[]{1,4,1,4});
或创建专业课......
public class TopPart extends PolyHelper {
public TopPart() {
super(new int[]{1,1,4,4}, new int[]{1,4,1,4});
}
}
在任何一种情况下,您都可以在List
或数组......
public class ShadowApplet extends Applet
private List<PolyPainter> polyPainters = new ArrayList<>(25);
public void init() {
polyPainers.add(new PolyHelper(new int[]{1,1,4,4}, new int[]{1,4,1,4}));
polyPainers.add(new TopPart());
//...
}
然后你只需要迭代列表来绘制它们......
public void paint(Graphics g) {
super.paint(g);
for (PolyPainter painter : polyPainters) {
painter.paint(g);
}
}
现在说了所有......
我建议:
Applet
并以JPanel
开头,而是覆盖paintComponent
。除了顶级容器(如Applet
不是双缓冲的事实)之外,使用JPanel
作为基础的东西不仅可以让您进入更新的API,还可以提供自动双倍缓冲。它还会将您与给定的顶级容器分离,并且可以更轻松地重新使用该组件,因为您可以将JPanel
添加到您想要的容器中...查看{{3更多详情Shape
(或几何)API,它完成了我在下半场开箱即用的大部分内容。有关详细信息,请查看Performing Custom Painting和Working with Geometry