我正在尝试创建一个I*J数量的按钮。
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);
}
});
}
}
}
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
创建可以在侦听器中引用的行的最终实例。
我的主类在方法中运行。它运行一个可能需要大量时间才能完成的进程,所以我创建了另一个方法来停止该进程:它只是引发一个标志,使整个进程停止: 为了测试停止进程的方法,我应该采取什么方法来解决这个问题?
问题内容: 我收到错误提示,就像在主题中一样,请问如何修复…错误在menuItem循环中,在这里我尝试将textArea前景颜色设置为从menuItem中选择的一种:(colors [mi]) 问题答案: 该错误意味着 您不能在内部类中使用局部变量。 要在内部类中使用变量,必须对其进行声明。只要是循环计数器并且不能分配变量,就必须创建一种变通方法来获取可在内部类内部访问的变量中的值: 因此,您的代
问题内容: 我是lambda和Java8的新手。我面临以下错误。 封闭范围中定义的局部变量日志必须是final或有效的final 问题答案: 该消息说,到底是什么问题:你的变量 数 必须是最后的(即:携带关键字决赛),也可以有效地最终(即:你只有一个值分配给它 一旦 拉姆达外)。否则,您将无法在lambda语句中使用该变量。 但是,当然,这与您使用 log 冲突。关键是:您不能在lambda内部写
这个问题在这里已经有了答案: > 为什么匿名类只能访问最终变量? 为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告 “lambda在start方法参数被垃圾回收后才能运行”是什么意思? 为什么要复制?
当我在写这段代码时,我得到了一个编译时错误,它说:“lambdas中的变量必须是final或实际上是final”。