d0rf47:
私は8つのクイーンズ問題への解決策を表示するには、JavaFXのプロジェクトに取り組んでいます。私は私のシーンは常に空をレンダリングされている奇妙な問題に遭遇していると私は、この問題を解決するように見えることはできません。
私は、プロジェクト内の他の単純なものをレンダリングしようとしていると、彼らは何かが私はGridPaneに私のラベルを追加していやり方が間違っていることを私に示唆している正しく表示します。それは何も表示されていない理由を私は把握することはできません動作するはずですので、しかし、私は教科書から直接このソリューションをコピーしました。タイトルが設定され、表示されているが、どこgridpaneがあるべきことは単に空です。
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);
}
}
そして、はい、私は似たタイトルの他のトピックを見てきましたが、これらの問題は、差分の原因から生じます。
あなたが提供することができます任意の洞察力がappricicatedされます!
lowzhao:
私は、画像の異なるサイズを使用してコードをテストしました。
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);
}
}