簡體   English   中英

從另一堂課上一堂課

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM