Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Font в потомке JPanel, смена шрифта 
V
    Опции темы
Mirkes
Дата 23.1.2012, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Возникла забавная проблема. Нужно сменить шрифт в потомке JPanel. 
Код потомка ниже
Код

package mymathDraw;

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.font.LineMetrics;

import javax.swing.JPanel;


public class MainPanel extends JPanel {
    private String data;

    public MainPanel() {
        super(null);
        setFont(new Font("Lucida Sans Unicode", 0, 14));
    }

    public void setData(String data) {
        this.data = data;
        System.out.println("setDta  " + getGraphics().getFont().getFamily());
        repaint();
    }


    public void paint(Graphics g) {
        System.out.println("" + g.getFont().getFamily());
        g.setFont(new Font("Lucida Sans Unicode", 0, 14));
        g.clearRect(0, 0, this.getWidth(), this.getHeight());
            // font test
            Font f = g.getFont();
            System.out.println("" + f.getFamily());
    }
}


При запуске в консоль выводится
Lucida Sans Unicode

При каждом вызове метода setData выводится
setDta  Lucida Sans Unicode
Dialog
Lucida Sans Unicode

Помогите понять, какого лешего возникает фонт Dialog, кто и когда его указывает?

Запускал как из под JDeveloper так и из консоли.


--------------------
Mirkes
PM MAIL   Вверх
jk1
Дата 23.1.2012, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75




M
jk1

Mirkes

Выбирайте пожалуйста раздел правильно, все-таки не первый день на форуме.



Код

Помогите понять, какого лешего возникает фонт Dialog, кто и когда его указывает?


Рискну предположить, что он задан в Graphics на основании текущего LAF. А поскольку super.paint(g) Вы вызвать забыли, то значения свойства font компонента не устанавливается в Graphics.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Mirkes
Дата 23.1.2012, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Цитата(jk1 @  23.1.2012,  08:07 Найти цитируемый пост)
Mjk1Mirkes, Выбирайте пожалуйста раздел правильно, все-таки не первый день на форуме

Честно говоря сомневася в какой раздел отнести. Прошу прощения.


Цитата(jk1 @  23.1.2012,  08:07 Найти цитируемый пост)
Рискну предположить, что он задан в Graphics на основании текущего LAF. А поскольку super.paint(g) Вы вызвать забыли, то значения свойства font компонента не устанавливается в Graphics. 

Я, честно говоря полагал, что достаточно установить font в инициации панели (конструкторе). В Paint я стал устанавливать фонт после того, как не помогла установка в инициаторе. smile 

Кроме того, вызов super.paint(g) я не забыл. Он у меня закоментирован, поскольку при его вызове все написанное в paint стирается. Причина стирания для меня загадка smile 

Если поможете разобраться с этими чудесами буду очень признателен.


--------------------
Mirkes
PM MAIL   Вверх
jk1
Дата 23.1.2012, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



У меня Ваш пример после добавления super.paint(); все рисует как надо

Код

public class MainPanel extends JPanel {

    private static MainPanel panel = new MainPanel();

    private String data = "default";

    public MainPanel() {
        setFont(new Font("Lucida Sans Unicode", 0, 14));
    }
    public void setData(String data) {
        this.data = data;
        repaint();
    }
    public void paint(Graphics g) {
        super.paint(g);
        g.clearRect(0, 0, this.getWidth(), this.getHeight());
        System.out.println(g.getFont());
        g.drawString(data, 5,50);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setContentPane(panel);
        frame.setBounds(100,100, 300, 100);
        frame.setVisible(true);
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                panel.setData("custom");
            }
        });
    }
}


Может Вы super.paint(); в конец метода писали?


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Mirkes
Дата 23.1.2012, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Цитата(jk1 @  23.1.2012,  10:46 Найти цитируемый пост)
Может Вы super.paint(); в конец метода писали? 

Точно, в конце.
Поставил в начало все заработало. Большое спасибо.


--------------------
Mirkes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.