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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шрифты в JLabel и Graphics, Почему не соответсвуют шрифты? 
V
    Опции темы
Mirkes
Дата 4.5.2014, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Собственно аналогичная тема один раз поднималась но ничем не завершилась. 
Вопрос такой, в следующем проекте я с помощью двух средств вывожу на экран одну и ту же строку "Text string"
В первом случае в компоненте JLabel, во втором случае прямой записью в graphics (drawString());
Результаты очень похожи, но разные. В JLabel я получаю гладкое изображение, а в панели, куда я писал с помощью drawString текст кучерявый. Для большей видимости я установил большой размер шрифта. Отсюда у меня возникает вопрос,  java в принципе не позволяет писать методом drawString без кучерявостей, или есть какие-то методы для нормального отображения шрифтов в заданной позиции?
Ниже приложил код, демонстрирующий гладкость и кучерявость.
Код

import java.awt.Color;
import java.awt.Dimension;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class DrawTest extends JFrame {
    @SuppressWarnings("compatibility:-7219524240197200809")
    private static final long serialVersionUID = 6624116544861830802L;
    
    private static final int FONT_SIZE = 150;

    public DrawTest() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout(new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS));
        this.setSize( new Dimension(700, 500) );
        JLabel label = new JLabel("Test string");
        label.setFont(new Font("Times New Roman",Font.PLAIN,FONT_SIZE));
        this.getContentPane().add(label);
        this.getContentPane().add(new TestPanel());
        
    }
    

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        } 
        JFrame frame = new DrawTest();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation( ( screenSize.width - frameSize.width ) / 2, ( screenSize.height - frameSize.height ) / 2 );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible(true);
    }

    public static class TestPanel extends JPanel{
        @SuppressWarnings("compatibility:-8422086996905397447")
        private static final long serialVersionUID = 2821606868015374930L;
        
        public TestPanel(){
            setBackground(Color.WHITE);
            Font f = new Font("Times New Roman",Font.PLAIN,FONT_SIZE);
            setFont(f);
        }
        
        public void paint(Graphics g){
            g.setColor(Color.BLACK);
            g.drawString("Test string", 10, FONT_SIZE+10);
        }
    }
}


На всякий случай прилагаю и рисунок


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  TestString.png 52,92 Kb


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

    public void paint(Graphics g){
        g.setColor(Color.BLACK);
    
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    
        g.drawString("Test string", 10, FONT_SIZE+10);
        }

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


Опытный
**


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

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



Спасибо большое dorogoyIV. Эта проблема решена, правда моя исходная проблема получила статус нерешаемой  smile 
К сожалению обработка сглаживания букв происходит при отрисовке, а не при формировании glyph, что, в общем то, понятно.
Жаль. Но все равно спасибо.


--------------------
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.0607 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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