gpt4 book ai didi

java - 获取已添加到 JFrame 中的按钮

转载 作者:行者123 更新时间:2023-12-02 06:20:09 25 4
gpt4 key购买 nike

我正在开发一个简单的 15 谜题游戏。我向 JFrame 添加了 16 个生成的编号按钮,这就是练习(大学)。我现在正尝试进一步进行交互,因此我需要获取所有按钮并将它们放入 2D vector 中,以便计算用户单击的位置以及单元格是否可以“滑动”以及在哪里“滑动”,但我不知道如何从框架中获取它们。

这是生成器代码:

public void generation(){
int num;
Random rand = new Random();
ArrayList<String> list = new ArrayList<String>();

for(int i = 0; i < this.getTot(); i++)
list.add(""+ i);

while(!list.isEmpty()){
do{
num = rand.nextInt(this.getTot());
} while (!list.contains("" + num));

list.remove("" + num);

if(num == 0){
this.add(new Button(" ");
}
else{
this.add(new Button("" + num);
}
}
}

这是构造函数:

public Base15(int x, int y){
this.setSize(WIDTH, HEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLayout(new GridLayout(x, y));

this.x = x;
this.y = y;

this.generation();
this.cells = new Button[x][y];
}

谢谢。

更新:遵循 ufis 建议并完成了二维数组!

for (int row = 0; row < x; row++){
for (int col = 0; col < y; col++){
do{
num = rand.nextInt(this.getTot());
} while (!list.contains("" + num));

list.remove("" + num);

if(num == 0){
cells[row][col] = new Button(" ", sw, label);
this.add(cells[row][col]);

}else{
cells[row][col] = new Button("" + num, sw, label);
this.add(cells[row][col]);

}
}

谢谢大家!

最佳答案

除非我完全误解你的问题,否则你可以这样做

JFrame theFrame = new JFrame();
// lots of code here to add buttons
Component[] components = theFrame.getComponents();
for (Component component : components) {
if (component instanceof Button) {
// do something
}
}

但是,如果您在创建/将所有按钮添加到框架时存储一些对它们的引用,那就更好了。

<小时/> 编辑:我认为您应该在将按钮添加到框架时检查创建按钮的方式。

当你这样做时

JFrame theFrame = new JFrame();

for (int i = 0; i < 15; i++) {
theFrame.add(new Button());
}

您没有对您的 Button 的引用。这就是为什么您需要“从框架中获取 Button”。

如果你做了类似的事情

JFrame theFrame = new JFrame();
Button[] buttons = new Button[15];

for (int i = 0; i < 15; i++) {
buttons[i] = new Button();
theFrame.add(buttons[i]);
}

您不必在稍后阶段循环遍历所有组件,因为您已经引用了按钮数组中的按钮。当然,您也可以将其设为 Button[][]。但这里的优点是您可以在创建时引用按钮列表。

关于java - 获取已添加到 JFrame 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com