2017-01-19 19 views
0

Я создал штрих-код (d = 26) правый центр холста (300x300) Размер шрифта по умолчанию - 12pt (НЕ PIXCEL) графического контекста. Я хочу написать числа, имеющие одну или две цифры справа от окружности, которую я создал выше. Можете ли вы дать мне математическое выражение, чтобы написать текст справа центра круга. Я также испытываю недостаток в понимании того, как сопоставить 12pt (POINTS) с пикселями. Может ли кто-нибудь помочь мне, пожалуйста?Как поместить некоторый текст в правый центр круга, который был нарисован на холсте javaFX?

Вот мой код:

@Override 
public void start(Stage primaryStage) { 
    Pane root = new Pane(); 

    Scene scene = new Scene(root, 300, 300); 
    primaryStage.setTitle("My Canvas"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    Canvas cvs = new Canvas(); 
    cvs.setWidth(300); 
    cvs.setHeight(300); 
    cvs.setLayoutX(0); 
    cvs.setLayoutY(0); 
    root.getChildren().add(cvs); 
    GraphicsContext gc = cvs.getGraphicsContext2D(); 

    gc.setFill(Color.BLACK); 
    gc.setStroke(Color.BLUE); 
    gc.setLineWidth(2); 

    // creating circle (diameter = 26) right center of the canvas(300 x 300) 
    // So, x = (widthOfCanvas-diameter)/2 , y = ((widthOfCanvas-diameter)/2 
    double d = 26.0d; 
    double x = (cvs.getWidth() - d)/2; 
    double y = (cvs.getHeight() - d)/2; 
    gc.strokeOval(x, y, d, d); 

    // default font size is 12pt (NOT PIXCEL) 
    gc.fillText("26", 150, 150); // How can I set this text right center of the circle? Please give me som mathematical expression 
    // I also don't know relationship betwwen pt and px 
    // What can I do? 
} 
+2

Почему бы не использовать «Ярлык» и подходящий макет ('StackPane'), например? –

+1

Да: вам действительно нужен холст? Это проблема макета, которая, как правильно указывает @BoHalim, лучше решается с помощью макета. (Фактически, вы даже можете сделать это только с меткой и некоторыми настройками CSS на ярлыке, нет необходимости в стеке и круге). Если у вас есть * использовать холст, это намного сложнее. –

+1

На самом деле, я создаю какое-то приложение для рисования, и мне нужно выяснить способ частичного числа диаграмм, используя вышеописанные числа. Но мне не удалось сопоставить макет fillText x, y, используя переменные x, y, которые я использовал для круга? Есть ли у вас какие-либо идеи? –

ответ

0

Спасибо за вас обоих! Я выполнил ваше мнение следующим образом! Теперь я могу рисовать circledNumbers где угодно!

@Override 
public void start(Stage primaryStage) { 
     Pane root = new Pane(); 

     Scene scene = new Scene(root, 300, 300); 
     primaryStage.setTitle("My Canvas"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

     Canvas cvs = new Canvas(); 
     cvs.setWidth(300); 
     cvs.setHeight(300); 
     cvs.setLayoutX(0); 
     cvs.setLayoutY(0); 
     root.getChildren().add(cvs); 

     GraphicsContext gc = cvs.getGraphicsContext2D(); 
     double x = (cvs.getWidth() - 26)/2; 
     double y = (cvs.getHeight() - 26)/2; 
     gc.drawImage(createCircledNumber(7), x, y); 

     gc.drawImage(createCircledNumber(35), 50, 50); 
     gc.drawImage(createCircledNumber(75), 70, 105); 
    } 

    private WritableImage createCircledNumber(int number) { 
     //createCircledNumber() method always returns 26px X 26px sized image 
     StackPane sPane = new StackPane(); 
     sPane.setPrefSize(26, 26);   

     Circle c = new Circle(26/2.0); 
     c.setStroke(Color.BLACK); 
     c.setFill(Color.WHITE); 
     c.setStrokeWidth(3); 
     sPane.getChildren().add(c); 

     Text txtNum = new Text(number+""); 
     sPane.getChildren().add(txtNum); 
     SnapshotParameters parameters = new SnapshotParameters(); 
     parameters.setFill(Color.TRANSPARENT); 
     return sPane.snapshot(parameters, null); 
    }