私の問題は、基本的に私が理解できないJava言語からです。 これは、Platform.runlater
メソッドを使用してGUIを更新するという概念を理解するための基本的なコードです。Javafx Guiの更新
package practise;
import java.util.Random;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
public class Practise extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
final Line l1 = new Line(200,80,200,0);
final int c = 0;
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
Platform.runLater(new Runnable() {
Random rn = new Random();
@Override
public void run() {
if(c==0)
{
l1.setStartX(rn.nextInt(400));
l1.setStartY(rn.nextInt(400));
c = 1;
}
else
{
l1.setEndX(rn.nextInt(400));
l1.setEndY(rn.nextInt(400));
c = 0;
}
}
});
}
});
l1.setStroke(Color.YELLOW);
l1.setStrokeWidth(2);
StackPane root = new StackPane();
root.getChildren().add(btn);
root.getChildren().add(l1);
Scene scene = new Scene(root, 400, 400, Color.WHITE);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
これは私のコードです。私は、線の始点または終点を交互に変更したいと考えています。そのために、私はボタンを押すたびに値を変更する変数 'c'を作成しました。
しかし、問題はコンパイラがint型をfinalに変更することです。つまり、それは一定になり、もはや私の目的に役立たないということです。
なぜこのようなことが起こり、どうすれば回避できますか?
匿名の内部クラスで 'c'を使用しているために起こっています。 – Arjan
匿名の内部クラスで外部クラスの変数を使用しています。そのような変数は 'final'でなければなりません。 'Runnable'を実装し、そのコンストラクタまたは他の方法で' c'を渡す '* real * 'クラスを作成します。 –
この問題を回避するにはどうすればよいですか? –