gpt4 book ai didi

java - 从一类访问另一类

转载 作者:行者123 更新时间:2023-12-01 14:37:28 25 4
gpt4 key购买 nike

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

    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 中保存的数据?

最佳答案

您需要一个 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的类型,BreadBoard扩展了HexBoard,你可以像这样将它传递到构造函数中

contentPane.add(new PCinterface(Board));

关于java - 从一类访问另一类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com