我正在使用字體作爲數據。這些字體採用AWT格式。我想在我的eclipse應用程序的TableView中有一個字體樣本。不幸的是,SWT有它自己的Font類。它與AWT有什麼關係?是否有可能將一種字體轉換爲另一種字體?如何將AWT字體轉換爲SWT字體? SWT不完整:無法使用文件中的字體名稱
我AWT的字體是由TTF文件的代碼
in = getClass().getResourceAsStream(fileNames[i]);
font = Font.createFont(Font.TRUETYPE_FONT, in).deriveFont(FontSize);
該字體是完全的的文件是非常重要的獲得。
UPDATE
難以置信!看起來像SWT
作者想象自己很酷,創建自己的和分開的Font
實現,所以唯一的對應關係是由文件。但他們的手顫抖着,他們忘記實施字體名稱確定!
更新2
我已經準備了TTF文件,這實際上是Times New Roman
字體,但在所有的名稱被改變爲Arial。我將這個文件命名爲arial_actuallytimes.ttf
。
的我跑到下面的程序
public static void main(String[] args) throws FontFormatException, IOException
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
// The font file
File fontFile = new File("arial_actuallytimes.ttf");
// Get the font name from AWT
Font awtFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(12f);
String fontName = awtFont.getFontName();
shell.setText(fontName);
// Load the font in SWT
display.loadFont(fontFile.getAbsolutePath());
// Get the font instance with the name we got from AWT
final org.eclipse.swt.graphics.Font swtFont = new org.eclipse.swt.graphics.Font(display, fontName, 12, SWT.NORMAL);
// Use the font
Label label = new Label(shell, SWT.BORDER);
label.setFont(swtFont);
label.setText("The quick brown fox jumps over the lazy dog");
label.addListener(SWT.Dispose, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
swtFont.dispose();
}
});
Composite frameHolder = new Composite(shell, SWT.EMBEDDED);
frameHolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
//frameHolder.setLayout(new FillLayout());
JLabel jLabel = new JLabel("The quick brown fox jumps over the lazy dog");
jLabel.setFont(awtFont);
JPanel jPanel = new JPanel(new BorderLayout());
jPanel.add(jLabel, BorderLayout.CENTER);
Frame frame = SWT_AWT.new_Frame(frameHolder);
frame.setLayout(new BorderLayout());
frame.add(jPanel);
frame.pack();
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
的結果如下
這意味着SWT沒有承認字體爲宋體。可能是分心Arial
這是系統默認情況下,它採用默認Arial
。
更新3
文件樣本:https://drive.google.com/file/d/0B1jZw9H7L4gmTjUwYURhU0lkeGM/edit?usp=sharing
注意OP:請記住'用這種方法創建'處理()'字體'。 – Baz
但第一行和第二行之間的連接在哪裏?如果設備只能載入一種字體,那麼「字體名稱」參數是什麼?或者如果這個參數起作用,那麼如何保證那個字體會被使用? –
設備可以加載許多字體。使用加載的字體數據的一部分的字體名稱使字體可用。您必須在Font構造函數中指定該字體名稱。 –