Каждый раз, когда я добавляю строку в сетку, отображается исключение IllegalArgumentException

Я пытаюсь понять это и много гуглил. Но я ничего не нашел.

Я впервые задаю вопрос о StackOverflow.

Пожалуйста, потерпите меня, если я не смог правильно объяснить свой вопрос.

ЛЮБАЯ ПОМОЩЬ БУДЕТ ЦЕНА.

Вот мой код:

package Main_Game;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

import Models.character;
import Models.gameObject;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class leaderBoard
{
    private static int id = 0;

    leaderBoard()
    {
        //Stage created
        Stage primaryStage = new Stage();

        //root pane
        BorderPane root = new BorderPane();

        GridPane gridPane = new GridPane();
        gridPane.setHgap(5);

        //grid pane for top header
        GridPane gridHeader = new GridPane();
        gridHeader.setHgap(140);

        root.setMargin(gridHeader, new Insets(30,0,0,0));

        //scene created with borderpane as root
        Scene scene = new Scene(root,1200,700);

        //setting background of whole scene
        final String BACKGROUND = "-fx-background-color: #2A2927;";

        //setting style of header
        final String HEADER_STYLE = "-fx-font-family: 'Bungee Shade';"
                + "-fx-font-size: 40;";

        final String TEXT_STYLE = "-fx-font-size: 25;"
                + "-fx-font-family:  'Calibri';";

        root.setStyle(BACKGROUND);

        //Header for rank text
        Text rankHeader = new Text();
        rankHeader.setText("Rank#");
        rankHeader.setFill(Color.YELLOW);
        rankHeader.setStyle(HEADER_STYLE);

        //Header for name text
        Text nameHeader = new Text();
        nameHeader.setText("Name");
        nameHeader.setFill(Color.YELLOW);
        nameHeader.setStyle(HEADER_STYLE);

        //header for score text
        Text scoreHeader = new Text();
        scoreHeader.setText("Score");
        scoreHeader.setFill(Color.YELLOW);
        scoreHeader.setStyle(HEADER_STYLE);

        //
        Text rank = new Text();
        rank.setStyle(TEXT_STYLE);
        rank.setFill(Color.WHITE);

        Text name = new Text();
        name.setStyle(TEXT_STYLE);
        name.setFill(Color.WHITE);

        Text score = new Text();
        score.setStyle(TEXT_STYLE);
        score.setFill(Color.WHITE);

        //totalScore variable gets total score from another java file
        String totalScore = Integer.toString(gameObject.getTotalScore());

        //playerName variable gets character's name from another java file
        String playerName = character.getName();

        //Using BufferedWriter to write playerName and totalScore in a text file
        BufferedWriter bw = null;

        try
        {
            File file = new File("score.txt");

            //if file does not exit it will create a new file
            if (!file.exists())
            {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file,true);
            bw = new BufferedWriter(fw);


            /*Want to increment ID everytime file gets written but that's not main concern for now
             * 
             * file gets written with playerName and totalScore 
             * 
             * I have used \t to create space between ID, name and score
             */

            bw.write(id++ + "\t\t\t\t\t\t\t\t" + playerName + "\t\t\t\t\t\t\t" + totalScore);


            //After every line....another line starts with new line
            bw.newLine();

            bw.flush();
            bw.close();

        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

        /*
         * Using BufferedReader to read from file and outputting it in my scene
         */

        BufferedReader br = null;

        try
        {
            FileReader fr = new FileReader("score.txt");
            br = new BufferedReader(fr);


            String line;
            while((line = br.readLine()) != null)
            {
                //Splitting words so that I can print out ID, Name and Score
                //If i don't use split it just prints out score...because score gets written at last in file
                String[] words = line.split(",");
                for(int i =0; i<words.length; i++)
                {
                    name.setText(words[i]);

                    /*
                     * HERE IS THE PROBLEM
                     * Every time it reads line from text file
                     * I add it to gridPane below Header
                     * but i want to add rows dynamically but i get illegalArgumentException
                     */
                    gridPane.add(name,2,1);
                }
            }


            br.close();

        }
        catch(IOException e)
        {
            e.printStackTrace();
        }


        /*
         * IGNORE THIS PART
         * I tried using Scanner but it won't work
         */

//      Scanner sc = null;
//      try 
//      {
//          File file = new File("score.txt");
//          sc = new Scanner(file);
//      }
//      catch(IOException e)
//      {
//          e.printStackTrace();
//      }
//      
//      while(sc.hasNextLine())
//      {
//          Scanner sc2 = new Scanner(sc.nextLine());
//          while(sc2.hasNext())
//          {
//              String s = sc2.next();
//              score.setText(s);
//          }
//      }

        gridHeader.add(rankHeader, 0, 0);
        gridHeader.add(nameHeader, 1, 0);
        gridHeader.add(scoreHeader, 2, 0);

        root.setTop(gridHeader);
        root.setCenter(gridPane);

        primaryStage.setScene(scene);
        primaryStage.setTitle("Basket Bud");
        primaryStage.show();
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
336
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете добавление одного и того же объекта несколько раз. то есть вы добавляете ту же переменную "name" на панель, что очень важно в Javafx, лучший способ сделать это -

ArrayList<Text> myText = new ArrayList<Text>();  
try
        {
            FileReader fr = new FileReader("score.txt");
            br = new BufferedReader(fr);


            String line;

            while((line = br.readLine()) != null)
            {
                //Splitting words so that I can print out ID, Name and Score
                //If i don't use split it just prints out score...because score gets written at last in file
                String[] words = line.split(",");

                for(int i =0; i<words.length; i++)
                {
Text temp = new Text();
                    temp.setText(words[i]);
temp.setStyle(TEXT_STYLE);
        temp.setFill(Color.WHITE);
myText.add(temp) //allows you to edit these later 
                    /*
                     * HERE IS THE PROBLEM
                     * Every time it reads line from text file
                     * I add it to gridPane below Header
                     * but i want to add rows dynamically but i get illegalArgumentException
                     */
                    gridPane.add(temp,2,i+1);
                }
            }


            br.close();

        }

Извините за плохой абзац, который невозможно сделать на телефоне

Если это не сработает, скажите мне

О, вы имеете в виду, что OP добавляет в контейнер тот же экземпляр Text, а не «переменную с тем же именем» ... потому что сначала это не имело смысла: P

MadProgrammer 16.04.2018 00:58

@MadProgrammer да, я не знал, как это лучше выразить

Austin 16.04.2018 00:59

Большое вам спасибо, сэр, очень признателен !!! Единственное, что он отображает каждый текст .... но в одной строке .... и поверх друг друга .... я хочу отобразить его в новой строке .... может быть, из-за gridPane (temp, 2,1);

Utsav Dave 16.04.2018 01:08

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

Austin 16.04.2018 02:42

Другие вопросы по теме