Java(GUI)多次添加JButton?

Java(GUI)多次添加JButton?,java,swing,user-interface,jbutton,Java,Swing,User Interface,Jbutton,我在学习Java,我在创建一个记忆型游戏,你必须找到两张相等的牌 我已经创建了一个窗口等,但我的问题是添加多个JButton到它。(我的卡是带有图标的按钮)。我已经在问题所在的地方对代码进行了注释 //Get the images. private File bildmapp = new File("bildmapp"); private File[] bilder = bildmapp.listFiles(); //My own class extending JButton Kort[] k

我在学习Java,我在创建一个记忆型游戏,你必须找到两张相等的牌

我已经创建了一个窗口等,但我的问题是添加多个JButton到它。(我的卡是带有图标的按钮)。我已经在问题所在的地方对代码进行了注释

//Get the images.
private File bildmapp = new File("bildmapp");
private File[] bilder = bildmapp.listFiles();
//My own class extending JButton
Kort[] k = new Kort[bilder.length];

for(int i = 0; i < bilder.length; i++){
        k[i] = new Kort(new ImageIcon(bilder[i].getPath()));
    }



//Later in my code:
    int sum = rows * columns;
    Kort[] temp = new Kort[sum];

            //My function to randomize.
    Verktyg.slumpOrdning(k);

            //***********************//
            //Trying to fill a array from K (which contains all cards) so my temp contains SUM cards and SUM/2 pairs
    for(int i = 0; i < sum/2; i++){
        temp[i] = k[i];
        temp[i+sum/2] = k[i];
    }


            //Problem is that i only get SUM/2 (half of the cards) cards, not the 16 (8 pairs) i would like to  add in this case
            //SYNLIGT = VISIBLE.
    for(int i = 0; i < sum; i++){
        temp[i].setStatus(Kort.Status.SYNLIGT);
        j.add(temp[i]);
    }
//获取图像。
私有文件bildmapp=新文件(“bildmapp”);
私有文件[]bilder=bildmapp.listFiles();
//我自己的类扩展JButton
Kort[]k=新的Kort[bilder.length];
对于(int i=0;i
您的代码将每个
Kort
对象添加到容器中两次,因为数组
temp
包含对每个
Kort
的两个引用。第二次添加
Kort
时,它会移动到第二个位置。
组件一次只能出现在一个地方。

由于数组
temp
包含对每个
Kort
的两个引用,因此代码最终会将每个
Kort
对象添加到容器中两次。第二次添加
Kort
时,它会移动到第二个位置。组件一次只能出现在一个地方。

您必须创建
sum
JButton对象,而不是
sum/2
;否则,两个按钮相同,因此只显示一次。

您必须创建
sum
JButton对象,而不是
sum/2
;否则,两个按钮相同,因此仅显示一次。

您不能添加同一小部件两次。您需要两个单独的按钮(但可以在两个按钮上使用相同的图标)。

您不能两次添加相同的小部件。你需要两个单独的按钮(但你可以在两个按钮上使用相同的图标)。

我不太确定我是否能得到它。由于k[]包含我所有的卡,我想创建一个新的数组temp,我从k/2填充temp/2。然后temp的另一半(temp/2)将包含相同的卡集。一份temp/2。所以这是行不通的,还是我写错了代码?你的循环和你描述的一样,所以在这个意义上是“正确的”。但是你不能两次在一个容器中添加一张卡,然后期望在容器中获得两张卡,就像你可以两次进入汽车并期望成为自己的乘客一样:)如果你需要两张相同的卡同时出现在容器中,您必须创建两个独立但相同的
Kort
对象来表示它们。我不太确定是否能理解。由于k[]包含我所有的卡,我想创建一个新的数组temp,我从k/2填充temp/2。然后temp的另一半(temp/2)将包含相同的卡集。一份temp/2。所以这是行不通的,还是我写错了代码?你的循环和你描述的一样,所以在这个意义上是“正确的”。但是你不能两次将一张卡添加到一个容器中并期望在容器中得到两张卡,就像你可以两次上车并期望成为自己的乘客一样:)如果你需要两张相同的卡同时出现在容器中,你必须创建两个独立但相同的
Kort
对象来表示它们。