powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Рисование в JavaFX 2.0
18 сообщений из 18, страница 1 из 1
Рисование в JavaFX 2.0
    #37777878
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задача в программе наглядно (графически) отобразить введённые значения (размеры, углы). На той же форме, где и вводятся значения.

Посоветуйте контейнер для рисования в JavaFX
1. Чтобы я мог рисовать примитивы пропорциональные размерам контейнера. (для этого мне кажется надо знать его размеры.. имхо)) )
2. Чтобы нарисованные в нём полилинии (и пр. мои примитивы) не вылазили за границы контейнера. (на Pane'е (и StackPane'е) есть такой глюк)
3. Чтобы изображение масштабировалось при изменении размера контейнера. Либо чтобы я самостоятельно мог бы поймать это событие и смасштабировать рисунок.

Ещё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку . Посоветуйте как это оптимальней сделать. Штриховки уже описал программно, но могу сделать растры. Проблема: не получается нарисованные полилинии ограничить гем. фигурой.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37778658
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,
- скорее всего надо делать руками.
- что значит изменение размеров контейнера? Лучше приведи скрин расположения элементов ГУИ.
В общем случае, т.к. тебе нужен масштаб и "не вылазило", то лови все события и на команду отрисовки вписывай НОВЫЙ размер рисунка в НОВОЕ место.
Код: java
1.
Draw(СистемаКоординат, ОбъектРисования, ПанельКудаРисуют)
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37778660
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkЕщё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку .
В JavaFX не знаю. В Win32API есть кисть со штриховкой и объект Регион
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37779727
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123avp.mkЕщё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку .
В JavaFX не знаю. В Win32API есть кисть со штриховкой и объект Регион
В AWT тоже есть подобная функциональность в Prism пока не нашёл..
По мотивам этой статьи. (TexturePaint)
http://today.java.net/pub/a/today/2009/07/30/javafx-custom-paints.html
Переписал часть кода с чуднóго языка на Java. C учётом некоторых особенностей API JavaFX 2.
Но в самом конце меня ждал неприятный сюрприз. Как я понял в связи с переходом с AWT на Prism код абсолютно бесполезен.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
import java.awt.Graphics2D;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.net.URL;
import javafx.scene.Group;
import javafx.scene.shape.Ellipse;
import javax.swing.ImageIcon;

public class Esquisse extends Group {
    public Esquisse() {
        Ellipse ellipse = new Ellipse(150d, 100d);
        ellipse.setStroke(javafx.scene.paint.Color.BLACK);
        ellipse.setFill(new javafx.scene.paint.Paint() {
            double x = 10d, y = 10d, width = 10d, height = 10d;
            //не разбирался что это за цифры, от фонаря поставил 10

            @Override
            public Object impl_getPlatformPaint() {
                URL resource = getClass().getClassLoader().getResource("pict.png");
                ImageIcon image = new ImageIcon(resource);
//                System.out.println(image.getIconWidth());
//                System.out.println(image.getIconHeight());

                BufferedImage bi = new BufferedImage(image.getIconWidth(),
                        image.getIconHeight(),
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D g = bi.createGraphics();
                g.drawImage(image.getImage(), 0, 0, null);
                g.dispose();

                double _width = (width == 0) ? image.getIconWidth() : width;
                double _height = (height == 0) ? image.getIconHeight() : height;

                Rectangle2D.Double anchor = new Rectangle2D.Double(x, y, _width, _height);
                TexturePaint texturePaint = new java.awt.TexturePaint(bi, anchor);
//                Вот тут-то и поломана совместимость!
//                return texturePaint;
//                Поэтому заместо texturePaint вывожу красную заливку
                return com.sun.prism.paint.Color.RED;
            }
        });

        getChildren().add(ellipse);
    }
}

java.awt.TexturePaint cannot be cast to com.sun.prism.paint.Paint

В пакете com.sun.prism.paint нашёл интересный класс ImagePattern.
Но он уже успел стать depricated притом настолько, что приложение с его использованием даже не компилируется..
Esquisse.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Унаследоваться от com.sun.prism.paint.Paint и что-нибудь там начудить нельзя т.к. его конструктор не имеет модификатора public.


Пробовал такой хренью заниматься, без толку.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public Object impl_getPlatformPaint() {
    com.sun.prism.paint.Color cl = new com.sun.prism.paint.Color(30,30,30,127);
    int ln = 100;
    byte[] ar = new byte[ln * 5];
    for (int i = 0; i < ar.length; ++i) {
        ar[i] = 127;
    }
    cl.putRgbaPreBytes(ar, ln);

//    Такой тоже)
//    cl.putBgraPreBytes(ByteBuffer.wrap(ar));
    return cl;
}
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37779938
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,
а чё ты в рядом ветку про JavaFX не запостишь?
Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37779943
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
import javafx.scene.Group;
import javafx.scene.control.Label;

public class Esquisse extends Group {
    public Esquisse() {
        Label r = new Label();
        r.setMinSize(150, 200);
        r.setRotate(30d);
        r.setStyle("-fx-background-image: url(" + '"' + "texture.png" + '"' + "); -fx-background-repeat: repeat repeat; -fx-background-position: left top; -fx-padding: 8px;");
        getChildren().add(r);
    }
}


Единственное что хоть как-то работает.
Как сделать также с фигурой посложнее. Или как хотябы обрезать Label чтобы он стал параллелограммом.

Разбаньте пожалуйста 1024. Я только у него пока видел приложения jfx. Может подскажет что-нибудь)
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37779980
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
Мне не принципиально чтобы это был растр. Я их сначала векторными решил сделать. Всё ещё пока от этой мысли не отказался.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780046
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkPetro123Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
Мне не принципиально чтобы это был растр. Я их сначала векторными решил сделать. Всё ещё пока от этой мысли не отказался.
Профессиональный движёк (я делал на Delphi) делается не на компонентах визуальных \ панелях \ фреймах.
А в виде класса Коордиинат, Рисовального, и т.д.
Т.е. если говорить о векторном движке, то там есть класс точка, полигон, текст и т.д.
Класса параллелограмм нету.
Тогда рисовать можно на чём угодно. Брать Canvas\HDC\Printers.Canvas и т.д.
-----
Это если руками и "как полагается".
Т.е. если в JavaFX есть векторный API например, Canvas.LineTo(0,0,100,50). То нет проблем.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780099
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Я рад конечно что я не сам с собой разговариваю. Но нельзя ли больше конкретики в советах и с рабочими кодом на jfx 2. Домыслы и возможности gdi(+) мало интересны..

Хотя увидив слово HDC сразу вспомнилась OpenGL.. Может ей воспользуюсь.

JavaFX нет класса (графического) Точка, нет класса Canvas. Есть класс полилиния, полигон и много ещё которыми можно нарисовать параллелограмм. Про параллелограмм я написал для того что бы показать что у меня пока не такая сложная задача как закраска области нарисованной QuadCurve'ом. Но это пока..
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780123
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,
ну, может ещё это поможет (правда растр)
12283117
В остальном, я сказал - практики в той теме про JavaFX.
Удачи!
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780129
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkPetro123,
Я рад конечно что я не сам с собой разговариваю. Но нельзя ли больше конкретики в советах и с рабочими кодом на jfx 2. Домыслы и возможности gdi(+) мало интересны..

Это его обычный стиль общения :)

http://docs.oracle.com/javafx/2/api/javafx/scene/paint/Paint.html - посмотрите, возможно это что вам нужно (сделать свою реализацию аналогично Color, Gradient и т.п.).
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780208
kamre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В JavaFX сцене пока нет Canvas, но что-то на эту тему уже обсуждают .
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780220
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonidv http://docs.oracle.com/javafx/2/api/javafx/scene/paint/Paint.html - посмотрите, возможно это что вам нужно (сделать свою реализацию аналогично Color, Gradient и т.п.).
В четвёртом посте я какраз и реализовывал класс (абстрактный) javafx.scene.paint.Paint, который в свою очередь должен реализовать метод impl_getPlatformPaint() который в свою очередь должен возвращать экземпляр com.sun.prism.paint.Paint. (хотя возможно что-то ещё... Не зря же у него стоит тип Object.....)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
ellipse.setFill(
        new javafx.scene.paint.Paint() {
            @Override
            public Object impl_getPlatformPaint() {
		//тут был бесполезный код
                return com.sun.prism.paint.Color.RED;
            }
        }
);
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780227
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamreВ JavaFX сцене пока нет Canvas
оригинально :)
Даже в HTML5 его ввели.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780335
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,

Посмотрите, что возвращают gradient'ы.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780363
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvПосмотрите, что возвращают gradient'ы.
Как сие понять?

Классы LinearGradient и RadialGradient раширяют класс Paint, если вы об этом.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780470
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkLeonidvПосмотрите, что возвращают gradient'ы.
Как сие понять?

Классы LinearGradient и RadialGradient раширяют класс Paint, если вы об этом.
Я так понял, что вы не можете понять, что вернуть тут:

public Object impl_getPlatformPaint() {

Проще всего залесть в исходники и посмотреть, что возвращают тут классы, отвечающие за градиентный вывод.
...
Рейтинг: 0 / 0
Рисование в JavaFX 2.0
    #37780502
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvЯ так понял, что вы не можете понять, что вернуть тут:
public Object impl_getPlatformPaint()
Предоставленый мной код - рабочий.

LeonidvПроще всего залесть в исходники и посмотреть, что возвращают тут классы, отвечающие за градиентный вывод.
Да, пожалуй. Только у меня нет исходных кодов этих классов.
Не подскажите где их взять?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Рисование в JavaFX 2.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]