2017-01-28 12 views
0

У меня есть quetion, и я действительно ценю любую помощь и ответы. это моя проблема: Я работаю с edmunds api, я уже создал классы, и я могу анализировать данные json в своих объектах классов. Теперь я хочу отобразить этот объект как Scrollpane, чтобы сделать это, я создал boucle «for» для создания HBOX для каждого объекта с метками, содержащими имя атрибута моего объекта. до сих пор отображение данных в HBOX и scrollpane прошло успешно, но они просто HBoxs, и я не могу выбрать любой из HBOx для работы. В моей scrollpane, я показываю автомобиль, как bmw.audi .. и когда я выбираю HBOx из bmw, например, я просто хочу отобразить все модели этого make. пожалуйста, просто скажите мне, если вы этого не сделаете что-то understansJavafx и Java

это мой класс "сделать":

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Make { 

    @JsonProperty("id") 
    private int mk_id ; 
    @JsonProperty("name") 
    private String mk_name; 
    @JsonProperty("niceName") 
    private String mk_nicename; 
    @JsonProperty("models") 
    private List<Model> list_modele; } 

мой класс Модель:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Model { 

    @JsonProperty("id") 
    private String md_id ; 
    @JsonProperty("name") 
    private String md_name; 
    @JsonProperty("niceName") 
    private String md_nicename; 
    @JsonProperty("years") 
    private List<Years> list_years;} 

и мой букле для:

@FXML public void btn_clicked (javafx.event.ActionEvent e) 
    { 


     All_makes t = (All_makes)newparse_object <All_makes>(All_makes.class).ParseUri("https://api.edmunds.com/api/vehicle/v2/makes?state=new&fmt=json&api_key=wdxg7wh338vac3359m34qjj6"); 
     HBox o = new HBox(); 
     for(int i =0 ; i< t.get_list_makes().size();i++) 
     { 
     VBox b = new VBox(10); 
     Label label = new Label(t.get_list_makes().get(i).get_mk_name()); 
     Label label2 = newLabel(t.get_list_makes().get(i).get_mk_nicename()); 
     b.getChildren().addAll(label, label2); 
     b.setMaxSize(100, 100); 
     o.getChildren().add(b); 
     } 
     o.maxWidth(5); 
     scroll_pane.setContent(o); 

} 
+0

Почему бы не использовать [ 'ListView'] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ListView.html)? –

+0

Я не хочу отображать свой элемент, как список, я хочу отображать их как коробки. 5 коробок в строке с изображением и именем –

+0

Вид списка может сделать это –

ответ

0

A ListView предоставляет функциональность выбора, а также прокрутку коробка. Вот простой пример:

import javafx.application.Application; 
import javafx.geometry.Orientation; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.ListCell; 
import javafx.scene.control.ListView; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class ListViewExample extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     ListView<Make> listView = new ListView<>(); 
     listView.setOrientation(Orientation.HORIZONTAL); 

     listView.setMaxHeight(100); 

     listView.setCellFactory(lv -> new ListCell<Make>() { 
      private Label nameLabel = new Label(); 
      private Label niceNameLabel = new Label(); 
      private VBox vbox = new VBox(nameLabel, niceNameLabel); 

      { 
       vbox.setMaxSize(100, 100); 
      } 

      @Override 
      protected void updateItem(Make make, boolean empty) { 
       super.updateItem(make, empty); 
       if (empty) { 
        setGraphic(null); 
       } else { 
        nameLabel.setText(make.getMk_name()); 
        niceNameLabel.setText(make.getMk_nicename()); 
        setGraphic(vbox); 
       } 
      } 
     }); 

     listView.getSelectionModel().selectedItemProperty().addListener((obs, oldMake, newMake) -> { 
      System.out.println(newMake.getMk_name() + " selected"); 
     }); 

     for (int i = 1 ; i <= 10 ; i++) { 
      Make make = new Make(); 
      make.setMk_name("Make "+i); 
      make.setMk_nicename("Description of make "+i); 
      listView.getItems().add(new Make("Make "+i, "Description of make "+i)); 
     } 

     Scene scene = new Scene(new StackPane(listView)); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

Спасибо, Джеймс, Может быть, моя идея была сложной вначале, но Listview звучит как простая эффективная идея, я буду работать над ней. хорошего дня –