2015-02-18 6 views
0

Im новой для JavaFX поэтому не быть суровым на меня :)Рисование polygpn в JavaFX

Im пытается нарисовать многоугольник на холсте, используя заранее определенный набор точек, но я не могу понять, как чтобы заниматься этим. Ive огляделся по учебникам, но они, похоже, не помогли.

Любая помощь будет высоко оценен

EDIT:

FXML Код

<?import javafx.scene.canvas.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 


<AnchorPane prefHeight="500.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8"> 
    <children> 
     <SplitPane dividerPositions="0.8995983935742972" layoutX="220.0" layoutY="99.0" orientation="VERTICAL" prefHeight="500.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <items> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0"> 
       <children> 
        <Canvas height="444.0" layoutX="6.0" width="588.0" /> 
       </children> 
      </AnchorPane> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" /> 
     </items> 
     </SplitPane> 
    </children> 
</AnchorPane> 

JavaFX код

@FXML 
private Canvas canvas; 

GraphicsContext gc; 

public void drawShape(List<Point> points){ 
gc = canvas.getGraphicsContext2D(); 
gc.strokeRect(30, 100, 40, 40); 
} 

это возвращает NullPointerException, когда я запустить его.

Моя проблема в том, что я хотел бы нарисовать форму, определенную на холсте в документе FXML.

+2

Вам нужно использовать холст? Существует встроенный класс ['Polygon'] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Polygon.html), который вы можете просто создать и добавить в 'Pane'. Если вы хотите использовать холст, класс 'GraphicsContext' имеет [' strokePolygon (...) '] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/ GraphicsContext.html # strokePolygon-double: A-double: A-int-) метод. –

+0

Я выбрал использовать холст, потому что он выглядит проще в использовании. Тем не менее, я использую построитель сцен, чтобы создать gui. Но мне не удалось связать холст, созданный в сцене, с контроллером. Я получаю nullPointerException при вызове gc = canvas.getGraphicsContext2D(); Ваша помощь с благодарностью – Sammson

+0

Я редактирую вопрос, и я добавил код контроллера. благодаря – Sammson

ответ

0

Вы не установили fx:id на Canvas в свой файл fxml. Вам нужно

<Canvas fx:id="canvas" height="444.0" layoutX="6.0" width="588.0" /> 

Значение атрибута fx:id должно совпадать с именем переменной в контроллере.

Вы не указали контекст, в котором вы вызываете метод drawShape(); вы должны обязательно позвонить ему после того, как FXMLLoader ввел в контроллер содержимое холста, определенное в файле fxml. Вы можете сделать это, вызвав drawShape() из метода initialize() или из обработчика события (но не из конструктора).

Смежные вопросы