Как программно определить, отображает ли шрифт символы в виде квадратов?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как программно определить, отображает ли шрифт символы в виде квадратов?

Сообщение Anonymous »

Код: Выделить всё

GraphicsEnvironment.getAvailableFontFamilyNames()
предоставляет нам массив всех установленных шрифтов. Однако на моем сайте не все шрифты правильно отображают текст; вместо этого в некоторых шрифтах отображаются только квадраты. Запустите приведенный ниже код, чтобы узнать, есть ли у вас «бесполезные» шрифты.
Теперь я хотел бы отсеять эти шрифты. Но как их обнаружить? Font.canDisplay('A') находит на моем сайте 6 шрифтов, Font.canDisplayUpTo("zÀÿĀ") находит еще 2. Но всего у меня получилось 36 неотображаемых шрифтов. Есть идеи, как получить остальное?

Код: Выделить всё

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FontsMany extends JFrame {
boolean first= true;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Insets insets;
JScrollPane scroll;
String fontList[] = ge.getAvailableFontFamilyNames();
int count= fontList.length;

public FontsMany() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(640, 700);
setTitle(String.valueOf(fontList.length)+" installierte Fonts");
MyPanel mp= new MyPanel();
scroll = new JScrollPane(mp);
ScrollBarListener sbl= new ScrollBarListener();
scroll.getHorizontalScrollBar().addAdjustmentListener(sbl);
scroll.getVerticalScrollBar().addAdjustmentListener(sbl);
add(scroll, BorderLayout.CENTER);
setVisible(true);
}

// With "void main(String args[])" the frame was displayed twice.
public static void main(String args[]) {
EventQueue.invokeLater(FontsMany::new);
}

class ScrollBarListener implements AdjustmentListener {
public void adjustmentValueChanged(AdjustmentEvent evt) {
scroll.repaint();
}
}

class MyPanel extends JPanel {
MyPanel() {
setPreferredSize(new Dimension(600, count/3*14));
}

public void paintComponent(Graphics g) {
if (insets == null) insets = getInsets();
g.translate(insets.left, insets.top);
Font theFont;
FontMetrics fm;
int fontHeight = 0;
int[] arr= new int[count];
int iend= count/3;
if (count%3 >0) iend++;
int idif= iend*2;
if (count%3 == 1) idif--;
int iUndisplayable= 0;
for (int i= 0; i=0 && ind

Подробнее здесь: [url]https://stackoverflow.com/questions/79887779/how-to-programmatically-detect-whether-a-font-renders-characters-as-squares[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»