2016-03-26 5 views
0

Простите ужасно общее имя GridPane ... оно будет изменено, как только я получу некоторый ввод.JavaFX: GridPane, add() целое число как метка

Я добавляю элементы в GridPane, это займет кнопку, это займет ярлык ... это займет почти все, кроме этого int.

 int[] listObjA = {312,23,241}; 

     GridPane gridpane = new GridPane(); 

     gridpane.add(new Label("Item Listing"), 1, 1); 
     gridpane.add(listObjA[0], 1, 2); 

Конечно, оставляя это как то, говорит, что «int не может быть преобразовано в узел». Любой совет? Я озадачен тем, насколько сложно просто печатать переменную в Java. Кстати, это должна быть переменная, потому что у меня будет метод, изменяющий ее непрерывно, поэтому простое изменение ее на новую метку («312») не является вариантом.

ответ

0

Java - это строго типизированный язык. Вы не можете просто притворяться, что int - это своего рода компонент пользовательского интерфейса.

Создайте ярлык для каждого элемента массива:

int[] listObjA = {312,23,241}; 

GridPane gridpane = new GridPane(); 

gridpane.add(new Label("Item Listing"), 0, 0); 

for (int i = 0 ; i < listObjA.length; i++) { 
    Label label = new Label(Integer.toString(listObjA[i])); 
    gridpane.add(label, i+1, 0); 
} 
0

Элементы массива int[] listObjA = {312,23,241}; не могут быть разрешены как тип узла. Вместо того, чтобы использовать это, вы могли бы использовать его в качестве

  Label firstLabel=new Label("312"); 
      Label secondLabel=new Label("23"); 
      Label thirdLabel=new Label("241"); 
      gridpane.add(firstLabel, x, y); 
      gridpane.add(secondLabel, x,y); 
      gridpane.add(thirdLabel, x, y); 

где х, у переменная содержит положение, где вы хотите вставить узел.

+1

Вы не можете добавить один и тот же узел несколько раз к графику сцены. Предполагалось, что вы хотите изменить переменную в каждом вызове 'add (...)'. –

0

Если необходимо изменить текст меток путем присвоения значения в вашей структура данных, вам нужен структура данных, которая поддерживает уведомления других частей вашего программа изменений. ObservableList была бы одной такой структурой данных. Вы можете использовать привязки API к изменениям, связать текст в Label с вашим содержимым ObservableList «s:

ObservableList<Integer> observableList = FXCollections.observableList(Arrays.asList(312, 23, 241)); 

GridPane gridpane = new GridPane(); 

gridpane.add(new Label("Item Listing"), 0, 0); 

for (int i = 0, size = observableList.size(); i < size; i++) { 
    Label l = new Label(); 
    // bind text to content at list position 
    l.textProperty().bind(Bindings.valueAt(observableList, i).asString()); 
    gridpane.add(l, 0, i + 1); 
} 

Созданием привязки здесь означает содержание меток автоматически обновляются, если содержание изменений списка , Например.

Scene scene = new Scene(gridpane); 

scene.setOnMouseClicked(new EventHandler<MouseEvent>() { 

    private int index; 

    @Override 
    public void handle(MouseEvent event) { 
     int i = index++ % observableList.size(); 
     observableList.set(i, 10 + observableList.get(i)); 
    } 
}); 

Приращение одного из значений на 10 щелчком мыши, который показывает пользовательский интерфейс.