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

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

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

+1

даже не знаю, как это компилируется, 'Hex Board # Cells() 'не является статическим, поэтому вы должны называть его экземпляром класса« HexBoard ». –

+0

импорт HexBoard; Затем обратитесь к наблюдению @ HunterMcMillen, а затем посмотрите на свои идентификаторы. – CPerkins

+1

Вам нужно обратить внимание на лучшие практики java. Старайтесь избегать переменных и методов, начиная с прописных букв. –

ответ

1

Вам нужен экземпляр 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)); 
+0

D'uh. Передайте всю доску на PCinterface, используя класс конструктора. Это так очевидно, когда вы так выразились! Большое спасибо. – KDM

0

Как прокомментировал @HunterMcMillen, что вам нужно экземпляр HexBoard для того, чтобы использовать метод Cells():

... 
HexBoard hexBoard = new HexBoard(width, height, wrap); 
int cellCount = hexBoard.Cells(); 
... 
Смежные вопросы