2015-12-30 78 views
0

我得到了3個使用網格窗格定位的顏色拾取器,我還使用了一個畫布。但問題是,畫布將網格窗格推到屏幕的底部。因此,如果使用root.add(HeadColor, 0, 1);(將第一個顏色選擇器添加到第0列和第1行的網格窗格中),Colorpicker將自己定位在屏幕中間某處,因爲網格窗格在網格窗格下方開始。所以我的問題是,如何將網格窗格放置在畫布頂部,還是將畫布上的拾色器放置在頂部?如何將ColorPicker放置在Canvas頂部的GridPane

的代碼,我使用:

package gui; 

import display.Image; 
import java.awt.Button; 
import java.io.IOException; 
import java.util.logging.*; 
import javafx.application.Application; 
import javafx.event.*; 
import javafx.geometry.*; 
import javafx.scene.Scene; 
import javafx.scene.canvas.*; 
import javafx.scene.control.ColorPicker; 
import javafx.scene.layout.*; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.*; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class JavaFXColorPicker extends Application { 
private Image head; 
private Image heart; 

ColorPicker HeadColor = new ColorPicker(); 
ColorPicker BodyColor = new ColorPicker(); 
ColorPicker LegColor = new ColorPicker(); 

@Override 
public void start(Stage primaryStage) throws IOException { 

    GridPane root = new GridPane(); 
    final Canvas canvas = new Canvas(200,300); 

    Scene scene = new Scene(root, 500, 400, Color.BLACK); 
    GraphicsContext gc = canvas.getGraphicsContext2D(); 
    root.setHgap(10); 
    root.setVgap(10); 
    root.setPadding(new Insets(10, 30, 30, 30)); 

    HeadColor.setOnAction(new EventHandler(){ 
     @Override 
     public void handle(Event event) { 
      Color HeadPaint = HeadColor.getValue(); 
      Color[] HeadColorArray = new Color[] 
       { 
        new Color(0 , 0, 0, 1), 
        HeadPaint, 
        HeadPaint, 
        HeadPaint, 
        HeadPaint, 
        new Color(1, 1, 1, 1) // de ogen 
       }; 

      try { 
       head = new display.Image(display.Parts.playerHead); 
      } catch (IOException ex) { 
       Logger.getLogger(JavaFXColorPicker.class.getName()) 
         .log(Level.SEVERE, null, ex); 
      } 

      head.recolour(HeadColorArray); 
      Image i = head; 
      gc.drawImage(i.show(), 200, 100); 
     } 
    }); 

    root.getChildren().add(canvas); 
    root.add(HeadColor, 0, 1); 
    root.add(BodyColor, 0, 2); 
    root.add(LegColor,0,3); 

    primaryStage.setTitle("Customize Character!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

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

回答

0

問題是這樣的:

root.getChildren().add(canvas); 

GridPane documentation狀態:

如果行/列索引未顯式設置,那麼孩子將被放置在第一行/列。

將行和列分配給您的Canvas,就像您使用ColorPickers一樣。

+0

我試過了,但仍然得到了同樣的問題:( – Peter

+0

爲你添加哪一行?畫布 – VGR

+0

列1行1 – Peter

相關問題