我正在尝试使ballpos
的图片图标在我的JButton
数组中的两个JButton
之间移动。这些是每次按下JButton jBAct
时按钮99和108,因此每次按下jBAct
时,图像会将一个向下移动到99,然后一旦达到99将向上移动到108然后再向下移动再到99等等。
这是我尝试过的,我知道这是错的,但我认为这是沿着这些方向发展的。
if (event.getSource() == jBAct)
{
if (ballpos > 99)
{
jBGame[ballpos-1].setIcon(new ImageIcon("src/ball.png"));
jBGame[ballpos].setIcon(new ImageIcon());
ballpos--;
} else {
if (ballpos < 108){
jBGame[ballpos+1].setIcon(new ImageIcon("src/ball.png"));
jBGame[ballpos].setIcon(new ImageIcon());
ballpos++;
}
}
}
此代码段位于课程public class CBabyBallBounce extends JFrame implements ActionListener
中
和方法的一部分public void actionPerformed(ActionEvent event)
答案 0 :(得分:0)
球移动的方向不会保留在代码中的任何位置,因此当球到达99到108之间的位置时,您无法知道移动它的方向。我建议将此信息保存在导致此行为的ActionListener
中。
在下面的例子中,我有一个4个按钮的数组,球在这两个按钮之间移动。我用String
表示球,但图像的概念是相同的。
public class Buttons {
JButton[] buttons = new JButton[4];
JButton move = new JButton("Move");
private final String text = "O";
Buttons() {
JPanel panel = new JPanel();
for (int i = 0; i < buttons.length; i++)
panel.add(buttons[i] = new JButton());
buttons[2].setText(text);
move.addActionListener(new ActionListener() {
private int ballpos = 2;
private int dir = 1;
@Override
public void actionPerformed(ActionEvent e) {
buttons[ballpos].setText(null);
ballpos += dir;
buttons[ballpos].setText(text);
if (ballpos == buttons.length - 1)
dir = -1;
else if (ballpos == 0)
dir = 1;
}
});
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.add(move, BorderLayout.PAGE_START);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Buttons());
}
}
我强烈建议每个按钮或按钮组添加ActionListener
,这些按钮与我上面的行为相同。它允许您封装按钮的行为。没有框架实现&#34;全球&#34; ActionListener
然后通过if-else
语句找到事件的来源。这会导致混乱和更多错误。
actionPerformed
内的代码可能稍微聪明一点,但我为这个例子寻求可读性。如果您了解它,您可以通过多种不同方式进行更改。
最后请注意,不要每次都创建新的图片图标。对图像进行一次打包并将其存储为我对字符串的处理(对于字符串,这是多余的,因为String
是特殊的)。你也可以使用null
而不是空图像,就像我对字符串一样。