gpt4 book ai didi

JAVA、SWT 在封闭范围内定义的局部变量必须是最终的或有效最终的

转载 作者:行者123 更新时间:2023-12-02 01:54:05 24 4
gpt4 key购买 nike

我正在尝试创建 i*j 个按钮。

我想在每个按钮上添加 mouseUp 操作,但出现错误。

我尝试创建一个“Line”类来处理监听器事件,但失败了。

这是我目前拥有的:

protected void createContents() {
// Connect to prolog engine
Query.hasSolution("use_module(library(jpl))"); // only because we call e.g. jpl_pl_syntax/1 below
String t1 = "consult('dots_lines.pl')";
Query.hasSolution(t1);
// Build GUI
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
shell.setLayout(null);
txtDotsAndLines = new Text(shell, SWT.BORDER);
txtDotsAndLines.setBounds(175, 10, 86, 21);
txtDotsAndLines.setText("Dots and lines");
Button btnStartGame = new Button(shell, SWT.NONE);
btnStartGame.setBounds(180, 226, 70, 25);
btnStartGame.setText("Start Game");
// TODO: Play with sizes
int size = 5;
Line[] lines = new Line[size * (size - 1)];
// Buttons are line
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size; j++) {
lines[i] = new Line(shell, SWT.NONE);
lines[i].setBounds(100 + i * 35,54 + j * 13,32,11);
lines[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
lines[i].setEnabled(false);
lines[i].setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));
String t4 = "move([[line(9,10,cpu),line(11,16,cpu),line(16,17,cpu),line(17,22,p1),line(5,6,p1),line(2,3,p1),line(1,2,p1)],cpu],4,X).";
System.out.println("each solution of " + t4);
}
});
}
}
}

这是 Line 类:

public class Line extends Button {


public Line(Composite parent, int style) {
super(parent, style);
// TODO Auto-generated constructor stub
}

protected void checkSubclass() {
// Disable the check that prevents sub-classing of SWT components
}

public void mouseUp(MouseEvent e) {
Line.this.setEnabled(false);
Line.this.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));
String t4 = "move([[line(9,10,cpu),line(11,16,cpu),line(16,17,cpu),line(17,22,p1),line(5,6,p1),line(2,3,p1),line(1,2,p1)],cpu],4,X).";
System.out.println("each solution of " + t4);
}

public void pc() {
Line.this.setEnabled(false);
Line.this.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
}

我得到的错误是:在封闭范围中定义的局部变量必须是最终的或实际上最终的。

提前非常感谢。

最佳答案

您无法在鼠标适配器匿名类中引用 i,因为它的值发生了变化。而是使用:

for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size; j++) {
final Line line = new Line(shell, SWT.NONE);
lines[i] = line;

line.setBounds(100 + i * 35,54 + j * 13,32,11);

line.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(final MouseEvent e) {
line.setEnabled(false);
line.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));

...
}
});

}
}

这里,final Line line 创建了可以在监听器中引用的行的最终实例。

关于JAVA、SWT 在封闭范围内定义的局部变量必须是最终的或有效最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52560744/

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