2016-12-18 11 views
0

JPanelを継承する "Player"というクラスがあります。クラスは属性xとyを持っています(これは問題かもしれませんが、それはわかりません)。私は次のコードを実行すると、それは(100、100)へのJPanelの場所を設定します。JPanelを継承するクラスでsetLocationが機能しない

private void initGamePanel() { 
    gamePanel.setBackground(Color.BLUE); 
    gamePanel.setVisible(true); 
    gamePanel.setLayout(null); 

    JPanel jPanel = new JPanel(); 
    jPanel.setLocation(100, 100); 
    jPanel.setSize(100, 100); 
    jPanel.setBackground(Color.CYAN); 

    gamePanel.add(player); 
} 

しかし、私は、「プレーヤー」クラスで同じことを行うとき、位置は(0、0)にとどまります。

private void initGamePanel() { 
    gamePanel.setBackground(Color.BLUE); 
    gamePanel.setVisible(true); 
    gamePanel.setLayout(null); 

    player = new Player(); 
    player.setLocation(100, 100); 
    player.setSize(100, 100); 
    player.setBackground(Color.CYAN); 

    gamePanel.add(player); 
} 

また、コンストラクタでplayerのxとyを設定すると、その位置はその値と同じになります。

+2

'getX()メソッドとgetY()メソッドがある場合は、これらのメソッドはすでにJPanelによって実装されており、オーバーライドされていないので、クラスには属性xとyがあります – camickr

+0

問題があるかもしれませんが、私はまだ問題を見つけることができない場合は、私は詳細を投稿します。 – Sjoerd

+0

ありがとう!それは問題でした:D – Sjoerd

答えて

1

クラスでは、これらはすでにJPanelので実装していないはずされているので、あなたは、getX()getY()メソッドを持っている場合は特に、

はそれができる問題であるかもしれない属性xとyを(持っていますあなたが本当にXが必要な場合はあなただけの直接コンポーネントの場所を設定することができますので、上書きされる。

わからない/ yが属性。

あなたはあのため、これらの属性が必要な場合なぜなら、クラス変数との混同を避けるために、よりわかりやすい名前を付けるべきです。

関連する問題