2013-05-02 84 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在主创建六角板为主的,不存在的PC界面的上下文。

我可以看到达我可以很容易地在主要包含PCInterface,这将解决问题:我试图开发多个平台,并希望这是一个合适的方式来分离平台依赖类。

我该如何在PCInterface类中使用BreadBoard中的数据?

+1

甚至不知道如何编译,Hex Board#Cells()不是静态的,所以你必须在'HexBoard'类的实例上调用它。 – 2013-05-02 21:59:53

+0

进口HexBoard;然后地址@ HunterMcMillen的观察,然后看看你的标识符。 – CPerkins 2013-05-02 22:00:04

+1

您需要注意Java最佳实践。尽量避免以大写字母开头的变量和方法。 – 2013-05-02 22:00:07

回答

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'呃。使用其构造函数类将完整的板传递给PCinterface。当你这样说的时候这很明显!非常感谢。 – KDM 2013-05-03 21:53:00

0

由于@HunterMcMillen评论,您需要实例化HexBoard以便使用该方法Cells()

... 
HexBoard hexBoard = new HexBoard(width, height, wrap); 
int cellCount = hexBoard.Cells(); 
...