【发布时间】:2021-11-08 21:09:15
【问题描述】:
我正在编写一个具有JLabel 数组的东西,该数组在第一个索引中有一些东西,然后检测到将东西向右移动的右键。基本上,[x][][][][][][] 开始,然后如果我按右键,它会切换到 [][x][][][][][]。目前,我无法让JLabel 正确更新。一开始它显示正确,但是当我按下正确的键时,整个事情就搞砸了。即,它是这样开始的:
(我有数字来衡量变化,当我解决这个问题时它们会消失)
这是对的,但是当我按下正确的键时,一切都消失了(只是空白。)但是,我在控制台中的测试仍然给了我正确的值。
数字甚至没有显示出来:/
以下是相关代码:
public Template() {
for (int i = 0; i < 7; i++) {
positions[i] = new JLabel();
positions[i].setFont(new Font("Times New Roman", Font.PLAIN, 15));
System.out.println("Yay");
}
// I initialize my JLabel array here instead of below because if I don't do this, there's no change whatsoever if I press the right key. I'm not sure if I did it correctly, though.
initialize(p1, 0);
}
private void initialize(String p, int index) {
frame = new JFrame();
JPanel header = new JPanel();
header.setBackground(Color.WHITE);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
header.setLayout(gbl);
header.setPreferredSize(new Dimension(400, 50));
c.fill = GridBagConstraints.HORIZONTAL;
for (int i = 0; i < 7; i++) {
if (i == index) {
positions[i].setText(p + "");
System.out.println("indexed set");
} else {
positions[i].setText("" + i);
System.out.println(positions[i].getText());
System.out.println("set");
}
c.gridx = i;
c.gridy = 0;
header.add(positions[i], c);
}
frame.add(header, BorderLayout.NORTH);
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
playMove(p);
}
public void playMove(String p) {
...
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent keyEvent) {
System.out.println("Game.keyPressed -- event: " + keyEvent);
if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("Right key pressed!");
int index = searchHeader();
System.out.println("index: " + index);
if (index != 6) {
int shift = index + 1;
System.out.println("shift: " + shift);
SwingUtilities.updateComponentTreeUI(frame);
initialize(p, shift, t);
}
}
}
@Override
public void keyReleased(KeyEvent keyEvent) {
System.out.println("Game.keyReleased -- event: " + keyEvent);
}
});
}
public int searchHeader() {
for (int i = 0; i < 7; i++) {
String val = positions[i].getText();
if (val == "x" || val == "o") {
System.out.println("i:" + i);
return i;
}
}
return 0;
}
我的System.out.println();测试都返回正确的值(数组中正确的索引、移位和数字),但我不确定为什么没有出现:/
如果我的代码需要澄清或遗漏了什么(在听取了我上一篇文章的建议后,我确实删除了一些不相关的信息),请告诉我
【问题讨论】:
-
为了获得更好的帮助,请尽快发布正确的minimal reproducible example 来证明您的问题。我们无法复制粘贴此代码并在我们的计算机中对其进行编译以查看它为什么不起作用。
-
如果 X 在最右边的 JLabel 中,你按下 JButton 向右移动会发生什么? Key Bindings 比 KeyListener 更适合您想要做的事情。您不必担心 JPanel 有焦点。