Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建自己的JLabel_Java_Swing_Jlabel - Fatal编程技术网

Java 创建自己的JLabel

Java 创建自己的JLabel,java,swing,jlabel,Java,Swing,Jlabel,我使用带有GridLayout的JPanel,并将JLabel放入其中。一切都很有效。但是我想使用我自己的类(extendsJLabel),有一个问题 当我使用JLabel时,我有以下渲染: 当我使用自己的JLabel时,我有: 这是我的JLabel自定义中的代码: public class LabelCustom extends JLabel{ int x; int y; public LabelCustom(int x, int y) { super(); this.

我使用带有GridLayout的JPanel,并将
JLabel
放入其中。一切都很有效。但是我想使用我自己的类(extends
JLabel
),有一个问题

当我使用
JLabel
时,我有以下渲染:

当我使用自己的
JLabel
时,我有:

这是我的
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);
    }
JPanel j=newjpanel();
j、 setLayout(新网格布局(nbCaseY、nbCaseX));

对于(int i=0;i
JLabel
已经有了一个
getX
getY
方法来在屏幕上定位标签,您已经(无意中)覆盖了此功能,现在返回了不相关的信息


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


因此,我建议不要使用
getX/Y
,而是创建一个
ID
类,该类携带您需要的信息(可能会覆盖
equals
hashcode
方法,以便更容易进行比较)并使用它(提供
getID
setID
方法)

JLabel
已经有了
get/X/Y
方法,最好不要重新实现它们,除非你有很好的理由,它不适合X和Y位置。这是一个hashmap的id,我认为它很有用;)您可能会问,您认为API是如何确定组件的位置的?我敢打赌,如果您将
@Override
添加到
getX
getY
方法中,它仍然会编译,告诉您您您正在重写父类的方法,这些方法可能是它为了某种目的而使用的。。。就像定位组件一样。。。如果你需要某种ID,ID创建一个新的方法,可能称为ID,它接受一个特定的对象,在这种情况下可能是一个点,并使用它来代替。为了更快地获得更好的帮助,发布一个或。