【发布时间】:2014-04-07 02:14:11
【问题描述】:
当您单击随机播放按钮时,我正在尝试随机播放 15 块滑动拼图的碎片。不幸的是,我不知道如何“抓取” JPanel 按钮,因为它们是动态的并且不会“传递”给 Action Listener: 这是我创建和添加按钮的 for 循环:
pos = new int[][] {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12, 13, 14, 15}
};
centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(4, 5, 0, 0));
add(Box.createRigidArea(new Dimension(0, 5)), BorderLayout.NORTH);
add(centerPanel, BorderLayout.CENTER);
int counter = 0;
for ( int i = 0; i < 4; i++) {
for ( int j = 0; j < 4; j++) {
if ( j == 3 && i == 3) {
label = new JLabel("");
centerPanel.add(label); // EMPTY LABEL
} else {
counter++;
button = new JButton();
button.setText(String.valueOf(counter));
button.addActionListener(this);
centerPanel.add(button);
}
}
}
然后我添加随机播放按钮:
southPanel = new JPanel(new FlowLayout());
JButton shuffleButton = new JButton("Shuffle");
southPanel.add(shuffleButton);
shuffleButton.addActionListener(this);
然后这是随机播放代码我有 4 个随机移动到目前为止我有(我知道这很糟糕,我不知道更好)。它移动标签但按顺序按下所有按钮:(
public void actionPerformed(ActionEvent e) {
//GET EMPTY LABEL LOCATION
int labelX = label.getX();
int labelY = label.getY();
int labelPosX = labelX / sizeLabel.width;
int labelPosY = labelY / sizeLabel.height;
int labelIndex = pos[labelPosX][labelPosY];
// GET button location
buttonX = label.getX() - size.width;
buttonY = label.getY();
// GET button position
buttonPosX = buttonX / size.width;
buttonPosY = buttonY / size.height;
buttonIndex = pos[buttonPosY][buttonPosX];
// IF LABEL can be moved
if ((labelY == buttonY && (labelX - buttonX) == size.width )) {
System.out.println("LABEL MOVES LEFT");
labelIndex = buttonIndex + 1;
centerPanel.add(label,buttonIndex);
// HERE I NEED TO "GRAB BUTTON" AND PUT it
// IN LABEL INDEX ???
labelY = label.getY();
labelX = label.getX();
}
任何帮助表示赞赏!我尝试使用 Component getComponent(int) 但我不知道如何实现它。我认为这样的事情会很完美......
【问题讨论】:
-
将标签放入某种
List。您可以随机播放列表并将标签重新应用于容器 -
我并没有完全遵循您的所有代码,但在我看来,您可能想要
button.setText(String.valueOf(pos[i][j]))而不是button.setText(String.valueOf(counter)。然后,您可以在洗牌并填充pos后创建按钮并运行此循环。 -
Swing 组件布局后不应移动它们。您可以更改 JButton 中的文本以模拟它们的移动。
-
@GilbertLeBlanc 但我如何从 Shuffle Action Listener 中“获取/知道”标签?我只根据我的 ListArray 知道 buttonIndex
-
你有一个 JButton 数组和一个字符串数组。更改字符串数组,然后将字符串数组覆盖在 JButton 数组上。您应该为磁贴可以移动的 4 个方向设置一个单独的动作侦听器。每个动作侦听器都会对字符串数组进行适当的更改。
标签: java swing jpanel jbutton actionlistener