Java ImageView получает позицию и устанавливает выравнивание

http://docs.oracle.com/javase/6/docs/api/javax/swing/text/html/ImageView.html

JEditorPane содержит внутри себя ImageView. Я могу получить размер и выравнивание:

    ImageView.getPreferredSpan(View.X_AXIS)); //20px
    ImageView.getPreferredSpan(View.Y_AXIS)); //20px
    ImageView.getAlignment(View.X_AXIS)); //0.5
    ImageView.getAlignment(View.Y_AXIS)); //1.0

Мне нужно получить координаты x/y (абсолютные или относительные) и изменить выравнивание по оси y на 0,75. Как я могу это сделать?


person user1221483    schedule 24.02.2012    source источник


Ответы (3)


Вы можете использовать этот http://java-sl.com/JEditorPaneStructureTool.html или упрощенную версию http://java-sl.com/tip_view_rectangle.html

person StanislavL    schedule 25.02.2012


Немного поздно, но я столкнулся с той же проблемой. Единственный способ исправить это, по крайней мере, я так и сделал, заключался в том, чтобы создать свой собственный ImageView и перезаписать значение vAlign в его функции setPropertiesFromAttributes(). Проблема в том, что setPropertiesFromAttributes защищен, поэтому вам нужно скопировать и вставить весь исходный код ImageView в свой собственный, а затем заменить код на:

    vAlign = 1.0f;
    if (alignment != null) {
        alignment = alignment.toString();
        if ("top".equals(alignment)) {
            vAlign = 0f;
        }
        else if ("middle".equals(alignment)) {
            vAlign = .5f;
        }
    }
    vAlign = .745f;

Вам также необходимо создать свой собственный HTMLEditorKit и перезаписать getViewFactory():

@Override
    public ViewFactory getViewFactory() {

        return new HTMLEditorKit.HTMLFactory() {

            public View create(Element e) {

                View v = super.create(e);

                Object o = e.getAttributes().getAttribute(StyleConstants.NameAttribute);

                if (o instanceof HTML.Tag) {

                    HTML.Tag kind = (HTML.Tag) o;

                    if (kind == HTML.Tag.IMG) {
                        return new MyImageView(e);
                    }
                }
...
person M. H.    schedule 28.03.2017