创作自己的JLabel

时间:2017-02-15 20:22:22

标签: java swing jlabel

我使用带有GridLayout的JPanel并将JLabel放入其中。 Everithing的作品。但我想使用自己的类(扩展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 个答案:

答案 0 :(得分:1)

JLabel已经有getXgetY方法将标签放在屏幕上,您已经(无意中)覆盖了此功能,现在返回不相关的信息

  

不适用于x和y位置。它是用于hashmap的id,我认为它很有用;)

因此,我建议使用getX/Y类来提供您需要的信息(可能会覆盖IDequals方法,而不是使用hashcode。更容易进行比较)并使用它(提供getIDsetID方法)