【发布时间】:2011-10-05 17:02:53
【问题描述】:
我在为一组 JButton 着色时遇到问题。
我制作了两个 JButton 数组:
public JButton Speler1[] = new JButton[140]; //Player1
public JButton Speler2[] = new JButton[140]; //Player2
这两个按钮阵列构成了赛车游戏的通道 1 和通道 2。我希望玩家 1 和 2 的位置在两个屏幕上都有颜色。所以玩家 1 可以看到玩家 2 在哪里,反之亦然。
我已经制作了一个方法,可以将两个玩家的位置发送给彼此。
if (message.contains("Positie")) {
String posit = message.replaceFirst("Positie", "");
int positi = Integer.valueOf(posit);
positie2 = positi;
kleurHokje kleur = new kleurHokje();
kleur.hokVerkleur(positi); // positi is the position of each player
}
所以当我调用方法 hokVerkleur(positi) 时,我想更改通道 2 上的按钮。
class kleurHokje{
public void hokVerkleur(int loc){
Speler2[loc].setBackground(Color.yellow);
Speler2[positie2].setBackground(Color.gray);
}
}
它只是行不通。虽然我对 Speler1[positie] 所做的几乎相同,但 Speler1 不使用网络,它可以按我的意愿工作。
感谢任何帮助,
谢谢杰夫
编辑: 如果我将代码放在其中一个 MouseListener 中,它可以正常工作,但它会自动着色,而不必每次都单击。
class Klaar extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
Speler2[positie2].setBackground(Color.gray);
}
}
附言。我的母语不是英语,希望你能理解我的问题。
【问题讨论】:
-
您确认
hokVerkleur确实被调用了吗?如果它没有被调用,那么代码试图做什么并不重要。使用调试器或System.out.println("debug")语句调试您的程序,并找出正在工作的内容。在您向我们提供这些信息之前,您还没有付出足够的努力来帮助我们帮助您(请参阅:SSCCE)。 -
当我在 hokVerkleur 中使用
System.out.println("Position "+loc);时,它会打印出应该更改的位置。 -
您应该在更改颜色后立即在按钮上尝试 .repaint()。 Swing 的不一致之处在于更改 一些 组件属性会自动重绘组件,但更改其他属性不会。
-
另外看看setBackground的文档:上面说不保证画背景。这取决于 JComponent 的子类是否决定这样做。我不知道 JButton 是否忽略 setBackground(不在 API 中)。
-
使用
.repaint()不起作用。现在吃晚饭,之后我会看一下文档。感谢您的回答!
标签: java swing jbutton colorize