Форум сайта разработчиков developers.sun.ru

Как изменить шрифт/текст (change Font in the Text)

Изображение

Модератор: alexsch

Как изменить шрифт/текст (change Font in the Text)

Сообщение ana Вт фев 09, 2010 10:35 am

В качестве упражнения решил набросать маленькую программку, которая динамически меняет размер шрифта. Вот что у меня получилось>

Код: Выделить всё
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.control.Button;

/**
* @author ana
*/
var text:Text;

Stage {
    title: "change font size"
    scene: Scene {
        width: 250
        height: 80
        content: [
            text = Text {
                font: Font {
                    size: 16
                }
                x: 10
                y: 30
                content: "Hello world!"
            }
            Button {
                text: "font size++"
                translateX: 10
                translateY: 50
                action: function () {
                       
                }}
            Button {
                text: "font size--"
                translateX: 150
                translateY: 50
                action: function () {

                }
            }
        ]
    }
}



Когда я хочу допустим увеличить шрифт,
в функции прописываю следующую строчку>

Код: Выделить всё
text.font.size++;


и получаю следующую ошибку
size has script only (default) write access in javafx.scene.text.Font
Изображение

Получается, что нет никакой возможности поменять размер шрифта?
Последний раз редактировалось ana Пн фев 15, 2010 10:31 am, всего редактировалось 1 раз.
Аватара пользователя
ana
 
Сообщения: 181
Зарегистрирован: Пн май 25, 2009 9:05 pm

Re: Как изменить шрифт (change Font in the Text)

Сообщение row2002 Вт фев 09, 2010 1:17 pm

По ссылке http://java.sun.com/javafx/1/docs/api/javafx.scene.text/javafx.scene.text.Font.html
написано, что размер шрифта нельзя изменять динамически.
row2002
 
Сообщения: 21
Зарегистрирован: Вс дек 06, 2009 8:40 am
Откуда: Новосибирск

Re: Как изменить шрифт (change Font in the Text)

Сообщение ana Вт фев 09, 2010 1:31 pm

row2002 писал(а):...
написано, что размер шрифта нельзя изменять динамически.


А если нельзя, а очень хочется?

Только что нашёл одно решение, но абсолютно не уверен, что оно лучшее ...
А именно каждый раз менять text в content на другой... :|
Аватара пользователя
ana
 
Сообщения: 181
Зарегистрирован: Пн май 25, 2009 9:05 pm

Re: Как изменить шрифт (change Font in the Text)

Сообщение raindrop Вт фев 09, 2010 1:49 pm

Размер фонта менять нельзя, а сам фонт можно.

Например вот так:
Код: Выделить всё
var size = 16;

Text {
    font:  bind Font {  size:  size }
    content: "Hello world!"
}


Полный пример:
Код: Выделить всё
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.control.Button;

var size = 16;

Stage {
    title: "change font size"
    scene: Scene {
        width: 250
        height: 80
        content:  [
            Text {
                font:  bind Font {  size:  size }
                x: 10
                y: 30
                content: "Hello world!"
            }
            Button {
                text: "font size++"
                translateX: 10
                translateY: 50
                action: function () {
                    size++;
                }
            }
            Button {
                text: "font size--"
                translateX: 150
                translateY: 50
                action: function () {
                    size--;
                }
            }
        ]
    }
}
Аватара пользователя
raindrop
 
Сообщения: 714
Зарегистрирован: Вт май 06, 2008 2:25 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение ana Пн фев 15, 2010 10:34 am

Из - за того, что на форуме опять нельзя добавлять новые темы (???)

Добавляю новый вопрос в старую тему...

В качестве упражнения решил написать маленький скрипт с помощью которого можно менять текст в сцене.

Вот мой код>
Код: Выделить всё
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.control.TextBox;
import javafx.scene.input.KeyEvent;

/**
* @author ana
*/
var text: Text;
var textBox: TextBox;

Stage {
    title: "Application title"
    scene: Scene {
        width: 250
        height: 80
        content: [
            text = Text {
                font: Font {
                    size: 16
                }
                x: 10
                y: 30
                content: "Application content"
            }
            textBox = TextBox {
                layoutX: 10
                layoutY: 50
                columns: text.content.length()
                text: text.content

                onKeyPressed: function (e: KeyEvent): Void {
                    println(e.code);
                    println(textBox.rawText);
                    text.content = textBox.rawText;
                }
            }
        ]
    }
}


Не могу понять почему отображение текста запаздывает на одну букву,
в поле ввода, всегда стоит на одну букву больше>

Изображение

Почему?
Аватара пользователя
ana
 
Сообщения: 181
Зарегистрирован: Пн май 25, 2009 9:05 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение raindrop Пн фев 15, 2010 11:08 am

Не могу понять почему отображение текста запаздывает на одну букву,
в поле ввода, всегда стоит на одну букву больше


Обновление атрибута textBox.rawText происходит при событии onKeyTyped.

Т.е. в вашей программе надо заменить обработку события onKeyPressed на onKeyTyped.
Аватара пользователя
raindrop
 
Сообщения: 714
Зарегистрирован: Вт май 06, 2008 2:25 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение ana Пн фев 15, 2010 11:20 am

А можно сделать TextBox плавающим?
T.e. если в тексте стоит длинное слово, то и TextBox показывает в начале длинное поле для ввода, если я стираю слово, то TextBox уменьшается и наоборот.

Я например поставил в коде
Код: Выделить всё
columns: text.content.length()

но по моему, это что то другое?
Аватара пользователя
ana
 
Сообщения: 181
Зарегистрирован: Пн май 25, 2009 9:05 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение raindrop Пн фев 15, 2010 11:38 am

Похоже что сolumns устанавливается только в первый раз.

Можно использовать textBox.width:
Код: Выделить всё
   
                onKeyTyped: function (e: KeyEvent): Void {
                        // ...
                        textBox.width = textBox.rawText.length() * 9 + 10;
                    }
Аватара пользователя
raindrop
 
Сообщения: 714
Зарегистрирован: Вт май 06, 2008 2:25 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение raindrop Пн фев 15, 2010 1:10 pm

ana писал(а):Из - за того, что на форуме опять нельзя добавлять новые темы (???)

Добавляю новый вопрос в старую тему...


Администраторы сказали, что они сейчас все починили и новые темы должны создаваться.
Аватара пользователя
raindrop
 
Сообщения: 714
Зарегистрирован: Вт май 06, 2008 2:25 pm

Re: Как изменить шрифт/текст (change Font in the Text)

Сообщение ana Чт фев 18, 2010 8:31 am

Изучая возможности замены шрифтов, набросал маленький скрипт который выводит шрифты пользователя на сцену>

Код: Выделить всё
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingComboBoxItem;
import javafx.ext.swing.SwingComboBox;

/**
* @author Администратор
*/
var userFonts: java.awt.Font[] = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();

class Model {

    var selectedFont: java.awt.Font;
    var fxFont: Font;
    var selectedFontIndex: Integer on replace oldValue {
                selectedFont = userFonts[selectedFontIndex];
                selectedFont = selectedFont.deriveFont(24.0);
                fxFont = com.sun.javafx.tk.Toolkit.getToolkit().getFontLoader().font(selectedFont);
            }
}
var availableFonts = SwingComboBox { translateX: 10 translateY: 50 items: [for (userFont in userFonts) SwingComboBoxItem { text: "{userFont.getFontName()}" }] }
var model = Model { selectedFontIndex: bind availableFonts.selectedIndex; };
var text = Text { translateX: 10 translateY: 30 font: bind model.fxFont content: bind model.selectedFont.getFontName() }

Stage {
    title: "Application title"
    scene: Scene {
        width: 270
        height: 220
        content: [
            availableFonts,
            text
        ]
    }
}


Сразу же появилось несколько вопросов.

Первый, почему когда название шрифта меняется с длинного на короткий, от длинного остаётся висеть хвостик на сцене. Это можно как то убрать?
Изображение

Второй, почему JavaFX не показывает некоторые шрифты?
Изображение
Аватара пользователя
ana
 
Сообщения: 181
Зарегистрирован: Пн май 25, 2009 9:05 pm

След.

Вернуться в Java FX

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 2