[英]Access one class from another
我定義了一個類,該類發布了一種允許訪問內部私有對象的方法:
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
我希望它會打開一個窗口並繪制一些六邊形,但是我可以看到在PCinterface上下文中不存在主要使用HexBoard創建的基於六邊形的板。
我可以看到我可以很容易地將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));
正如@HunterMcMillen所評論的那樣,您需要實例化HexBoard
才能使用Cells()
方法:
...
HexBoard hexBoard = new HexBoard(width, height, wrap);
int cellCount = hexBoard.Cells();
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.