2016-09-14 14 views
0

車に関する情報を表示するアプリケーションを作成していますが、後でCRUD機能を追加しようとしていますが、今はグリッドパネルに表示する画像を取得したいと考えています。HboxのImageViewがGridPaneに表示されない

私はスタートメソッドを含む小さなメインクラスを持っています。次に、すべてのGUIコンポーネントを持つ別のクラスがあります。ここではGUIです:

GUI

私は画像が画面の右上の領域に表示されるようにしたいです。

私は車のクラスを持っています。そこから車のオブジェクトを作成し、配列に入れました。配列には、ブランド、モデル、reg.nr、およびイメージファイルのURLに関する情報が格納されます。私はcarclassでget()メソッドも作成しました。

だから私は成功した私のGUIComponents-クラスのグリッドに他のすべてのコンポーネントを追加し、最後に私はちょうど最初carobjectsイメージを試してみて、表示するには、これを追加しよう:

HBox hbCarImg = new HBox(); 
ImageView imageView = new ImageView(new Image(carArray[0].getImageURL())); 
hbCarImg.getChildren().add(imageView); 
add(hbCarImg, 2, 1, 2, 3); 

私はhboxのが欲しいです列2、行1に表示され、2列および3行にわたって表示されます。

これを実行しても何も起こりません。このコードとコードの検索に時間を費やすことが大事です。何がうまくいかないかどうかはわかりません。

ヒントやご協力ありがとうございます。

+1

画像URLが正しいことを確認して、既存の画像データを指していますか? – VGR

+0

@VGRうん、配列のURLは有効です! – uckizz

+0

HBoxが実際にGridPaneに表示されていることを確認します。例えば、 'hbCarImg.setStyle(" -fx-border-color:red; ");' – VGR

答えて

0

が、少し長いですが、これは実行する必要があります。

//start with scrollpane 

    ScrollPane sp = new ScrollPane(); 

    //create a gridpane 
    GridPane gb = new GridPane(); 
    gb.setHgap(5); 
    gb.setVgap(5); 


    //for debugging purposes, make sure you remove it 
    gb.setGridLinesVisible(true); 

    gb.setPadding(new Insets(10,10,10,10)); 
    gb.setPrefSize(600, 600); 

    //initialize the number of rows and columns 
    int imgCol = 0; 
    int imgRow = 0; 


    //i am making use of an entity bean class (POJO) 
    //you can edit as you deem fit 
    //create a list 
    List<Info> list = rentalBn.carStatus(); 

    //create an String array list 
    /**i stored the filepath of my images to the database 
    instead of theother way round**/ 
    ArrayList<String> fileArray = new ArrayList<>(); 
    ArrayList<String> nameArray = new ArrayList<>(); 
    ArrayList<String> modelArray = new ArrayList<>(); 
    ArrayList<String> manuArray = new ArrayList<>(); 
    ArrayList<Float> priceArray = new ArrayList<>(); 
    ArrayList<String> availArray = new ArrayList<>(); 


    ImageView img; 

    //Use for loop to populate the arraylist with elements from the list 
    for(Info inf : list){ 
     fileArray.add(inf.getImage()); 
     nameArray.add(inf.getCarname()); 
     modelArray.add(inf.getCarmodel()); 
     manuArray.add(inf.getManufacturer()); 
     priceArray.add(inf.getPrice()); 
     availArray.add(inf.getAvailable()); 
    } 

System.out.println(fileArray.size()); 
System.out.println(nameArray.size()); 

for(int i = 0; i < fileArray.size(); i++){ 
    System.out.println(fileArray.get(i)); 
    System.out.println(nameArray.get(i)); 

//convert to bufferedImage 
BufferedImage bi; 
bi = ImageIO.read(new File(fileArray.get(i))); 

//convert to FXImage 
Image image = SwingFXUtils.toFXImage(bi, null); 


    img = new ImageView(); 
    img.setFitHeight(150); 
    img.setFitHeight(150); 
    img.setPreserveRatio(false); 
    img.setImage(image); 


//add text below the images 
Text nameText = new Text(); 
nameText.setText("Car Name: " + nameArray.get(i)); 

Text modelText = new Text(); 
modelText.setText("Car Model: " + modelArray.get(i)); 

Text manuText = new Text(); 
manuText.setText("Manufacturer: " + manuArray.get(i)); 

Text priceText = new Text(); 
priceText.setText("Price: " + priceArray.get(i)); 

Text availText = new Text(); 
availText.setText("Available: " + availArray.get(i)); 



//create a VBox 
    VBox hb = new VBox(); 
    hb.setPrefSize(150, 150); 


    //add the imageView and other texts inside the box   
    hb.getChildren().addAll(img, nameText, modelText, 
    manuText, priceText, availText);          

//create a pane, change the background 
Pane grid = new Pane(); 
grid.setStyle("-fx-background-color: #00ff00;"); 
grid.setPrefSize(200, 400); 
grid.getChildren().add(hb); 

    //add the pane inside the gridpane 
    gb.add(grid, imgCol, imgRow); 

//then add the gridpane inside the scrollpane 
    sp.setContent(gb); 

    imgCol++; 

    //reset the column and row 
    if(imgCol >3){ 
     imgCol =0; 

     imgRow++; 
    } 

} 


    Scene scene = new Scene(sp, 750, 700); 


    primaryStage.setTitle("stage title"); 
    primaryStage.setFullScreen(false); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

あなたがPOJO/entityクラスのTHISを参照することができます。