【问题标题】:Javafx and JavaJavafx 和 Java
【发布时间】:2018-09-26 05:56:39
【问题描述】:

我有一个问题,非常感谢任何形式的帮助和解答。

这是我的问题:

我正在使用 edmunds api。我已经创建了类,我可以在我的类对象中解析我的 json 数据。现在,我想将这些对象显示为滚动窗格。为此,我创建了一个“for”循环来为每个对象创建一个 HBOX,其标签包含我的对象属性的名称。

到目前为止,在 HBOX 和滚动窗格中显示数据是成功的,但它们只是 HBox,我无法选择任何 HBOX 来使用。

在我的滚动窗格中,我显示汽车的品牌(如 bmw、audi 等),例如,当我选择 bmw 的 HBOx 时,我只想显示该品牌的所有型号。

如果有不明白的地方请直接告诉我

这是我的班级“make”:

@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);

}

【问题讨论】:

  • 为什么不使用ListView
  • 我不想像列表一样显示我的项目,我想像框一样显示它们。连续5个框,有图片和名字
  • 列表视图可以做到这一点
  • 我看不懂,James 先生能再解释一下吗?顺便谢谢你
  • 根据您要如何选择数据,可以使用带有合适onAction 处理程序的Hyperlinks...

标签: java javafx scrollpane vbox hbox


【解决方案1】:

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);
    }
}

【讨论】:

  • 谢谢詹姆斯,一开始我的想法可能很复杂,但是 Listview 听起来是一个简单有效的想法,我会继续努力的。祝你有美好的一天
猜你喜欢
  • 2010-09-26
  • 1970-01-01
  • 2015-10-29
  • 2023-03-09
  • 2012-01-02
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多