2017-02-15 3 views
0

私はGridLayoutでJPanelを使用していますが、JLabelを内部に入れています。 Everithing works。しかし、私は自分のクラス(JLabelを拡張)を使用したいと思っています。作成自体JLabel

私はJLabelを使用する場合、私は、このレンダリングがあります

result

をそして、私は私自身のJLabelを使用するときに私がいることがあります。ここでは

result

は私JLabelから私のコードですカスタム:

public class LabelCustom extends JLabel{ 

int x; 
int y; 

public LabelCustom(int x, int y) { 
    super(); 
    this.x = x; 
    this.y = y; 
    this.setBackground(Color.white); 
    this.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); 
} 

public int getX() { 
    return x; 
} 

public void setX(int x) { 
    this.x = x; 
} 

public int getY() { 
    return y; 
} 

public void setY(int y) { 
    this.y = y; 
} 

}

そして、どのように私はそれを使用する:

JPanel j = new JPanel(); 
    j.setLayout(new GridLayout(nbCaseY, nbCaseX)); 

    for(int i=0; i<nbCaseY; i++) { 
     HashMap<Integer, JLabel> ligne = new HashMap(); 
     for(int y=0; y<nbCaseX; y++) { 
      LabelCustom p = new LabelCustom(i, y); 
      p.addMouseListener(ml); 
      //p.setBounds(100+ y*(hauteur), 100 + i*(hauteur), hauteur, hauteur); 
      p.setPreferredSize(new Dimension(hauteur, hauteur)); 

      //p.setBounds(100+ y*((width-200-2*hauteur)/nbCaseX), 100 + i*((height-200)/nbCaseY), ((width-200-2*hauteur)/nbCaseX), ((height-200)/nbCaseY)); 
      p.setTransferHandler(new TransferHandler("icon")); 
      p.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); 

      p.setOpaque(true); 
      p.setVisible(true); 
      j.add(p); 
      ligne.put(y, p); 
     } 
     Frame.p.getListeNiveau().get(0).ajouterLigne(ligne); 
    } 
+1

'JLabel'は' get/X/Y'メソッドを既に持っています。理由 – MadProgrammer

+0

xとyの位置ではありません。それはハッシュマップのIDのため、私はそれが有用だと思います;) – Sebastien

+1

あなたは、APIがあなたのコンポーネントの位置をどのように決定していると思いますか? '@Override'を' getX'メソッドと 'getY'メソッドの両方に追加すると、それはコンパイルされ、親クラスのメソッドをオーバーライドしていることがわかります。おそらく何らかの目的のために使用したいメソッドです。コンポーネントのような位置...おそらく – MadProgrammer

答えて

1

JLabelがすでに画面上にラベルを配置することであるgetXgetY方法は、あなたが(無意識に)この機能を上書きしてありました関連のない情報が返されます。

xとyの位置ではありません。

ので、代わりにgetX/Yを使用しての、私は多分にequalshashcodeメソッドをオーバーライドして、必要な情報を(運ぶIDクラスを作る提案);それは、私はそれが便利だと思いハッシュマップのIDです比較を簡単にする)、それを代わりに使用する(getIDsetIDメソッドを提供する)

関連する問題