0

我定义了一个类,它发布了一个允许访问以下私有对象的方法:

    public class HexBoard {

[...]

        public HexBoard(int Width, int Height, boolean Wrap) {
            SetSize(Width, Height); // inherently calls Reset()
            SetWrap(Wrap);
        } // HexBoard constructor


        public Polygon GetHexagon(int CellIndex) {

            Polygon p = new Polygon();
            for (int i = 0; i < 6; i++) {
                p.addPoint((int) (HexCentres.X(CellIndex) + HexPoints.X(i)), (int) (HexCentres.Y(CellIndex) + HexPoints.Y(i)));
            }

            return p;
        } // GetHexagon

        public int Cells() { return CellCount; }

    } // HexBoard

您可以看到该方法创建了一个多边形并返回它。这一点效果很好。现在,我有另一个类,它发布了一个扩展的 JPanel,以绘制一个由许多六边形组成的基于六边形的运动场。

import java.awt.*;
import javax.swing.*;

public class PCinterface extends JPanel {

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int CellCount = HexBoard.Cells();
        for (int i = 0; i < HexBoard.Cells(); i++) {
            g.drawPolygon(HexBoard.GetHexagon(i));
        }
    } // paintBoard

} // PCinterface

问题是 PCinterface 对 HexBoard 一无所知,因此它无法访问 HexBoard.Cells() 或 HexBoard.GetHexagon()。

执行以下操作时

public class Test {

    public static void main(String args[]) {

        BreadBoard Board = new BreadBoard(12,12,false);

        Board.SetCellRadius(25);

        JFrame frame = new JFrame();
        frame.setTitle("BreadBoard");
        frame.setSize(600, 600);
        frame.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {
              System.exit(0);
           }
        });
        Container contentPane = frame.getContentPane();
        contentPane.add(new PCinterface());
        frame.setVisible(true);
*/
    } // main

} // Test

我希望它会打开一个窗口并绘制一些六边形,但我可以看到使用 HexBoard 在 main 中创建的基于六边形的板在 PCinterface 的上下文中不存在。

我可以看到我可以很容易地将 PCInterface 包含在 main 中,这将解决问题:我正在尝试为多个平台进行开发,并希望这是分离平台相关类的合适方法。

请问如何在 PCInterface 类中使用 BreadBoard 中保存的数据?

4

2 回答 2

1

您需要一个 HexBoard 实例。您可能会在您的 PC 界面中添加一个

public class PCinterface extends JPanel {

    public HexBoard hexBoard

    public PCinterface(HexBoard board)
    {
        this.hexBoard = board;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int CellCount = this.hexBoard.Cells();
        for (int i = 0; i < this.hexBoard.Cells(); i++) {
            g.drawPolygon(this.hexBoard.GetHexagon(i));
        }
    } // paintBoard

} // PCinterface

假设Board, BreadBoardextends的类型HexBoard,您可以像这样将它传递给构造函数

contentPane.add(new PCinterface(Board));
于 2013-05-02T22:01:34.847 回答
0

正如@HunterMcMillen 评论的那样,您需要实例化HexBoard才能使用该方法Cells()

...
HexBoard hexBoard = new HexBoard(width, height, wrap);
int cellCount = hexBoard.Cells();
...
于 2013-05-02T22:02:38.360 回答