几何函数索引

时间:2012-01-04 05:38:01

标签: java swing graphics indexing hashmap

我正在制作一种基于命令的应用程序来绘制几何图形。因此,如果用户输入类似RECT 100, 50, 200, 120的内容,我会在绘图面板上的指定位置绘制一个矩形。

因此,我需要将RECT映射到g.drawRect(100, 50, 200, 120);以及所有类似的函数来绘制几何图形。

我将使用哈希映射进行映射,但我不知道如何在java中构建函数数组。在C ++中,我已经做到了这一点。

键可以是'RECT',值可以是索引的偏移量。

请告诉我如何索引这些功能。或者还有更好的方法来解决主要问题吗?

2 个答案:

答案 0 :(得分:5)

Java中没有函数指针,您需要通过继承和/或接口来完成。这是一个例子:

interface Shape {
    void draw(int[] data);
}

class Polygon implements Shape {
    public void draw(int[] data) {
        // Draw polygon using points data[i], data[i+1] for points
    }
}

class Circle implements Shape {
     public void draw(int[] data) {
         // Draw circle using data[0], data[1] for the center, and data[2] for radius
     }
}

在主程序的构造函数或静态初始化程序中:

Map<String,Shape> shapes = new HashMap<String,Shape>();
shapes.put("POLY", new Polygon());
shapes.put("CIRC", new Circle());

在您的绘图代码中:

shapes.get("CIRC").draw(new int[] {100, 100, 50});

答案 1 :(得分:3)

我必须承认,我并没有真正得到你的设计,我不知道你为什么需要一个像你所说的函​​数数组,但这就是在java中这样做的事情。

由于Function(java术语中的方法)不是Java中的“first-class-sitizen”,因此无法构建方法数组(至少在java 7中)。你可以做的是使用更面向对象的方法 - 定义一个接口,每个方法将是一个接口的实现(一个类),这样你就可以存储一个接口实现的数组。 我会使用设计模式Command而不是方法或类似的数组......希望这有帮助