내 문제는 기본적으로 알아낼 수없는 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를 마지막으로 변경하도록합니다. 즉, 그것이 상수가되어 더 이상 내 목적에 봉사하지 않는다는 것을 의미합니다.
왜 이런 일이 발생하며 어떻게 해결할 수 있습니까?
익명의 내부 클래스에서 'c'를 사용하고 있기 때문에 상황이 발생합니다. – Arjan
익명의 내부 클래스에서 외부 클래스의 변수를 사용하고 있습니다. 이러한 변수는 '최종'이어야합니다. 'Runnable'을 구현하고 생성자 또는 다른 방법으로'c'를 전달하는 "* 실제 *"클래스를 만듭니다. –
이 문제를 해결하려면 어떻게해야합니까? –