第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

JavaFX 未渲染數(shù)組中較早的項(xiàng)目,無法找到問題,相信線程可能是問題所在

JavaFX 未渲染數(shù)組中較早的項(xiàng)目,無法找到問題,相信線程可能是問題所在

FFIVE 2023-07-13 14:30:49
我編寫了一個(gè)畫線算法,在計(jì)算每個(gè)點(diǎn)時(shí)可以正確運(yùn)行,但是當(dāng)它被渲染時(shí),程序會(huì)跳過近 20 個(gè)點(diǎn),無法找到問題。我試圖弄亂算法,特別是 for 循環(huán),它將點(diǎn)添加到計(jì)算線的位置列表中,因?yàn)槲以谄渌姹镜拇a中遇到了問題。我只是一輩子都找不到代碼的問題,我對(duì) Java 還很陌生,你可能會(huì)從下面混亂的代碼中看出這一點(diǎn)。它說不要發(fā)布整個(gè)文件,但我無法確定哪里出了問題。我對(duì)下面混亂的代碼感到非常抱歉,我只是不知道出了什么問題。package sample;import com.sun.jdi.ArrayReference;import javafx.application.Application;import javafx.application.Platform;import javafx.scene.Group;import javafx.scene.canvas.Canvas;import javafx.scene.canvas.GraphicsContext;import javafx.scene.paint.Color;import javafx.scene.Scene;import javafx.stage.Stage;import java.util.ArrayList;class PositionCounter {    public int position;    public void setPosition(int newPos){        position = newPos;    }}public class Main extends Application {//    public void drawRectangle(int x1, int y1, int x2, int y2, Stage primStage, GraphicsContext gc){//        drawLine(x1, y2, x2, y2 , primStage, gc);//        drawLine(x1, y1, x2, y2, primStage, gc);//        drawLine(x1, y1, x1 , y2, primStage, gc);//        drawLine(x2, y1, x2 , y2, primStage, gc);//        drawLine(x1, y1, x2, y1 , primStage, gc);////    }//    public void fillPosition(ArrayList<Integer[]> points, GraphicsContext gc, int positionInArray ){        gc.fillRect(points.get(positionInArray)[0], points.get(positionInArray)[1], squareWidth / 2, squareWidth / 2);        //System.out.println("(" + points.get(positionInArray)[0] + ", " + points.get(positionInArray)[1]);    }    public void drawLine(int x1, int y1, int x2, int y2, Stage primStage, GraphicsContext gc){        ArrayList<Integer[]> points = calculateLine(x1, y1, x2, y2, gc);        PositionCounter position = new PositionCounter();        Thread thread = new Thread(new Runnable() {            @Override            public void run() {                    Runnable updater = new Runnable() {                        @Override                        public void run() {                            fillPosition(points, gc, position.position);                        }                    };問題是計(jì)算線函數(shù)返回正確的點(diǎn),只是沒有正確渲染它們。
查看完整描述

1 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

我建議您使用Timeline而不是Thread.?它可以使用 a 來完成Thread,但Timeline專為此類情況而設(shè)計(jì)。

畫線方法:

public void drawLine(int x1, int y1, int x2, int y2, Stage primStage, GraphicsContext gc)

{


? ? ArrayList<Integer[]> points = calculateLine(x1, y1, x2, y2, gc);

? ? PositionCounter position = new PositionCounter();


? ? int dy = Math.abs(y2 - y1);

? ? int dx = Math.abs(x2 - x1);

? ? int m = (dy >= dx) ? dy : dx;


? ? AtomicInteger counter = new AtomicInteger();

? ? Timeline animationTimeline = new Timeline(new KeyFrame(Duration.millis(20), (ActionEvent t) -> {

? ? ? ? position.setPosition(counter.getAndIncrement());

? ? ? ? fillPosition(points, gc, position.position);

? ? }));

? ? animationTimeline.setCycleCount(points.size());

? ? animationTimeline.play();


}

完整代碼:


import com.sun.jdi.ArrayReference;

import javafx.application.Application;

import javafx.application.Platform;

import javafx.scene.Group;

import javafx.scene.canvas.Canvas;

import javafx.scene.canvas.GraphicsContext;

import javafx.scene.paint.Color;

import javafx.scene.Scene;

import javafx.stage.Stage;


import java.util.ArrayList;

import java.util.concurrent.atomic.AtomicInteger;

import javafx.animation.KeyFrame;

import javafx.animation.Timeline;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.util.Duration;


class PositionCounter

{


? ? public int position;


? ? public void setPosition(int newPos)

? ? {

? ? ? ? position = newPos;

? ? }

}


public class JavaFXTestingGround extends Application

{


//? ? public void drawRectangle(int x1, int y1, int x2, int y2, Stage primStage, GraphicsContext gc){

//? ? ? ? drawLine(x1, y2, x2, y2 , primStage, gc);

//? ? ? ? drawLine(x1, y1, x2, y2, primStage, gc);

//? ? ? ? drawLine(x1, y1, x1 , y2, primStage, gc);

//? ? ? ? drawLine(x2, y1, x2 , y2, primStage, gc);

//? ? ? ? drawLine(x1, y1, x2, y1 , primStage, gc);

//

//? ? }

//

? ? public void fillPosition(ArrayList<Integer[]> points, GraphicsContext gc, int positionInArray)

? ? {

? ? ? ? gc.fillRect(points.get(positionInArray)[0], points.get(positionInArray)[1], squareWidth / 2, squareWidth / 2);

? ? ? ? //System.out.println("(" + points.get(positionInArray)[0] + ", " + points.get(positionInArray)[1]);

? ? }


? ? public void drawLine(int x1, int y1, int x2, int y2, Stage primStage, GraphicsContext gc)

? ? {


? ? ? ? ArrayList<Integer[]> points = calculateLine(x1, y1, x2, y2, gc);

? ? ? ? PositionCounter position = new PositionCounter();


? ? ? ? int dy = Math.abs(y2 - y1);

? ? ? ? int dx = Math.abs(x2 - x1);

? ? ? ? int m = (dy >= dx) ? dy : dx;


? ? ? ? AtomicInteger counter = new AtomicInteger();

? ? ? ? Timeline animationTimeline = new Timeline(new KeyFrame(Duration.millis(20), (ActionEvent t) -> {

? ? ? ? ? ? position.setPosition(counter.getAndIncrement());

? ? ? ? ? ? fillPosition(points, gc, position.position);

? ? ? ? }));

? ? ? ? animationTimeline.setCycleCount(points.size());

? ? ? ? animationTimeline.play();


? ? }


? ? @Override

? ? public void start(Stage primaryStage) throws Exception

? ? {


? ? ? ? //STUFF

? ? ? ? Group root = new Group();

? ? ? ? Scene scene = new Scene(root, 400, 400);

? ? ? ? scene.setFill(Color.GOLD);


? ? ? ? Canvas canvas = new Canvas(400, 400);

? ? ? ? GraphicsContext gc = canvas.getGraphicsContext2D();


? ? ? ? root.getChildren().add(canvas);

? ? ? ? //////////


? ? ? ? gc.fillRect(0, 200, 400, 1);

? ? ? ? gc.fillRect(0, 100, 400, 1);

? ? ? ? gc.fillRect(0, 300, 400, 1);

? ? ? ? gc.fillRect(200, 0, 1, 400);

? ? ? ? gc.fillRect(100, 0, 1, 400);

? ? ? ? gc.fillRect(300, 0, 1, 400);


? ? ? ? // drawRectangle(50, 50, 350, 250, primaryStage, gc);

? ? ? ? //drawLine(50, 250, 350, 250 , primaryStage, gc);

? ? ? ? //drawLine(50, 50, 350, 250, primaryStage, gc);

? ? ? ? //drawLine(50, 50, 50 , 250, primaryStage, gc);

? ? ? ? //drawLine(350, 50, 350 , 250, primaryStage, gc);

? ? ? ? drawLine(50, 50, 350, 50, primaryStage, gc);


? ? ? ? //////////

? ? ? ? primaryStage.setScene(scene);

? ? ? ? primaryStage.show();

? ? ? ? /////////

? ? }


? ? int squareWidth = 2;


? ? public ArrayList<Integer[]> calculateLine(int x1, int y1, int x2, int y2, GraphicsContext gc)

? ? {


? ? ? ? ArrayList<Integer[]> points = new ArrayList<Integer[]>();


? ? ? ? int dy = Math.abs(y2 - y1);

? ? ? ? int dx = Math.abs(x2 - x1);


? ? ? ? int sx = (x1 < x2) ? 1 : -1;

? ? ? ? int sy = (y1 < y2) ? 1 : -1;


? ? ? ? int err = dx - dy;

? ? ? ? int x = x1;

? ? ? ? int y = y1;

? ? ? ? int e2 = 0;


? ? ? ? Integer[] pos = new Integer[2];

? ? ? ? pos[0] = x;

? ? ? ? pos[1] = y;

? ? ? ? points.add(pos);


? ? ? ? int m = (dy >= dx) ? dy : dx;


? ? ? ? for (int i = 0; i <= m; i++) {


? ? ? ? ? ? e2 = 2 * err;

? ? ? ? ? ? if (e2 > -dy) {

? ? ? ? ? ? ? ? err = err - dy;

? ? ? ? ? ? ? ? x = x + sx;

? ? ? ? ? ? ? ? Integer[] position = new Integer[2];

? ? ? ? ? ? ? ? position[0] = x;

? ? ? ? ? ? ? ? position[1] = y;

? ? ? ? ? ? ? ? points.add(position);

? ? ? ? ? ? }


? ? ? ? ? ? if (e2 < dx) {

? ? ? ? ? ? ? ? err = err + dx;

? ? ? ? ? ? ? ? y = y + sy;

? ? ? ? ? ? ? ? Integer[] position = new Integer[2];

? ? ? ? ? ? ? ? position[0] = x;

? ? ? ? ? ? ? ? position[1] = y;

? ? ? ? ? ? ? ? points.add(position);

? ? ? ? ? ? }


? ? ? ? }


? ? ? ? return points;

? ? }


? ? public static void main(String[] args)

? ? {

? ? ? ? launch(args);

? ? }

}



查看完整回答
反對(duì) 回復(fù) 2023-07-13
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)