gpt4 book ai didi

java - 如何将AWT字体转换为SWT字体? SWT 不完整 : impossible to use font name from file

转载 作者:行者123 更新时间:2023-12-02 06:18:26 25 4
gpt4 key购买 nike

我正在使用字体作为数据。这些字体都是AWT格式的。我想在我的 Eclipse 应用程序的 TableView 中有一个字体示例。不幸的是,SWT 有它自己的 Font 类。它与 AWT 有什么关系?是否可以将一种字体转换为另一种字体?

我的AWT字体是通过代码从TTF文件获取的

in = getClass().getResourceAsStream(fileNames[i]);
font = Font.createFont(Font.TRUETYPE_FONT, in).deriveFont(FontSize);

字体必须与该文件完全相同,这一点很重要。

更新

难以置信!看起来 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();
}

结果如下

enter image description here

这意味着 SWT 无法将该字体识别为 Times New Roman。可能是被系统默认的 Arial 分散了注意力,所以它采用了默认的 Arial

更新3

文件示例:https://drive.google.com/file/d/0B1jZw9H7L4gmTjUwYURhU0lkeGM/edit?usp=sharing

最佳答案

你可以使用

Device.loadFont(file path);

加载字体 - 这需要文件路径而不是资源流。

然后您将使用

new Font(device, "font name", height, style);

创建 SWT 字体。

关于java - 如何将AWT字体转换为SWT字体? SWT 不完整 : impossible to use font name from file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com