Доступ к одному классу из другого

У меня есть определенный класс, который публикует метод, позволяющий доступ к частному объекту в:

    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, не существует в контексте PCinterface.

Я вижу, что я мог бы легко включить PCInterface в main, и это решило бы проблему: я пытаюсь разрабатывать для нескольких платформ и надеялся, что это подходящий способ для разделения классов, зависящих от платформы.

Как я могу использовать данные, хранящиеся в BreadBoard в классе PCInterface, пожалуйста?

2 ответа

Решение

Вам нужен экземпляр HexBoard. Вы можете добавить один к себе ваш PCinterface

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();
...
Другие вопросы по тегам