JavaFX Scene всегда пусто; отображение пустой сцены - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над проектом JavaFX, чтобы показать решение проблемы 8 королев. Я столкнулся со странной проблемой, когда моя сцена всегда отображается пустой, и я не могу решить эту проблему.

Я пытался отобразить другие простые вещи в проекте, и они отображаются правильно, что указывает на то, что что-то неправильно с тем, как я добавляю свои ярлыки в GridPane. Но я скопировал это решение прямо из учебника, поэтому оно должно работать, я не могу gr asp, почему ничего не показывает. Заголовок установлен и виден, но там, где должна быть сетка, просто пусто.

package sample;

import com.sun.glass.ui.Size;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;



public class Main extends Application {
    public static final int SIZE = 8;
    private int [] queens = { -1,-1,-1,-1,-1,-1,-1,-1};


    @Override
    public void start(Stage primaryStage) throws Exception{

        search();// look for a solution

        GridPane chessBoard = new GridPane();
        chessBoard.setAlignment(Pos.CENTER);
        Label[][] labels = new Label[SIZE][SIZE];

        for(int i = 0; i < SIZE; i++)
        {
            for(int j = 0; j < SIZE; j++)
            {
                chessBoard.add(labels[i][j] = new Label(), j, i);
                labels[i][j].setStyle("−fx−border−color: black");
                labels[i][j].setPrefSize(55,55);
            }
        }
        Image img = new Image("queen.png");

        for(int i = 0; i < SIZE; i++)
        {
            labels[i][queens[i]].setGraphic(new ImageView(img));
        }

        Scene scenes = new Scene(chessBoard, 55 * SIZE, 55 * SIZE);
        primaryStage.setTitle("Eight Queens");
        primaryStage.setScene(scenes);
        primaryStage.show();
    }
    private boolean search()
    {
        int k = 0;
        while( k >= 0 && k < SIZE)
        {
            int j = findPosition(k);
            if(j < 0)
            {
                queens[k] = -1;
                k--;
            }else
            {
                queens[k]=j;
                k++;
            }
        }
        if(k == -1)
            return false;
        else
            return true;
    }

    public int findPosition(int k)
    {
        int start = queens[k]+1;

        for(int j = start; j < SIZE; j++)
        {
            if(isValid(k,j))
                return  j;
        }
        return -1;
    }
    public boolean isValid(int row, int col)
    {
        for (int i = 1; i <= row; i++)
        {
            if( queens[row - i] == col ||
                queens[row - i] == col - i ||
                queens[row - i] ==  col + i
            )
            {
                return false;
            }
        }
        return true;
    }


    public static void main(String[] args) {
        launch(args);
    }
}

И да, я смотрел другие темы с похожими заголовками, но эти проблемы возникают из-за различий.

Любое предложение, которое вы можете предложить, оценивается!

1 Ответ

2 голосов
/ 22 марта 2020

Я проверил ваш код с разными размерами изображений.

ширина и высота в 64px могут отображаться правильно при увеличении до 256px, хотя изображение не может быть отображено

Непосредственное добавление ImageView в GridPane может решить вашу проблему, вы можете нужно найти способ нарисовать границу.

for(int i = 0; i < SIZE; i++)
{
    for(int j = 0; j < SIZE; j++)
    {
        chessBoard.add(new ImageView(isqueen(i,j)?queenimg:img), i, j);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...