我在JTextPane
中顯示ANSI art時遇到問題。Java - 如何在JTextPane中正確顯示ANSI藝術品
我想簡單地艇員選拔固定寬度或寬字體,並經由SimpleAttributeSet
除去JTextPane
的StyledDocument
的線間距將足以正確顯示some different pieces of ANSI art,但嘗試不同的字體和設置後,我意識到它必須是比那更多的。
我一直在使用來比較我的JTextPane
以查看我的代碼是否正確顯示the piece of digital art。
我的JTextPane
字體設置爲相同的字體DAMN NFO查看器是使用(根據其設置信使新建,8,默認情況下)通過artTextPane.setFont(new java.awt.Font("Courier New", 0, 8))
。但是,即使我通過StyledDocument.setParagraphAttributes(int, int, AttributeSet, boolean)
應用行間距設置,我的JTextPane
也不能正確顯示作品。 下面是兩個截圖顯示的差異:
該死的NFO查看器(宋體,8):
我JTextPane
(宋體8):
真奇怪的是,當我設置我的JTextPane
的字體大小爲9,對齊似乎是正確的,但有點不清晰。變焦到形成所述克在本領域件中的字符顯示青色像素的權利,使之看起來不鮮明:
我JTextPane
(速遞新9):
另外我注意到在記事本中打開art.txt顯示它就像DAMN NFO Viewer一樣。此外,JTextPane
似乎將它顯示得更小,就像,繪製角色的'棺材'顯得更小。
首先,我認爲該死的NFO瀏覽器使用的是不同版本的字體宋體的,所以我通過它的目錄挖,發現下面的註冊表文件:
[HKEY_CURRENT_USER\Software\DAMN\DAMN NFO Viewer\NFO]
"FontName"="[built-in] Courier New"
"FontData"=hex:91,00,03,01
"Window"=dword:00000023
"BackgroundColor"=hex:ff,ff,ff,00
"TextColor"=hex:00,00,00,00
"HyperLinkColor"=hex:bf,cd,db,00
"HyperLinkHoverColor"=hex:99,b4,d1,00
"Text"=dword:00000400
這讓我覺得它可能會使用衍生版本快遞新建,設置爲"FontData"=hex:91,00,03,01
。但是我不知道如何重現Java中的派生。
有沒有人能告訴我我在做什麼錯嘗試以相同的方式顯示JTextPane
中的文本文件DAMN NFO Viewer這樣做嗎?
編輯: 相加得到顯示的是我目前的工作,嘗試一些測試/例子代碼的字體「正確」(在不污損ANSI藝術的方式)。我使用NetBeans IDE的內置GUI生成器「Mantisse」創建了此測試GUI,因此它可能不是一個完美的示例,但它應該清楚地顯示與DAMN NFO Viewer的屏幕截圖不同。
package jtextpanetest;
public class JTextPaneTestUI extends javax.swing.JFrame {
/**
* Creates new form JTextPaneTestUI
*/
public JTextPaneTestUI() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
scrollPane = new javax.swing.JScrollPane();
panel = new javax.swing.JPanel();
textPanesSrollPane = new javax.swing.JScrollPane();
textPane = new javax.swing.JTextPane();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
panel.setLayout(new java.awt.BorderLayout());
textPane.setFont(new java.awt.Font("Courier New", 0, 8)); // NOI18N
textPane.setText("▀▀▀▀▀▀▀▀▀▄▄▄▄\n███████▄▄▄▄ ▀▀▀▄▄\n▄ ▀█▓█████████▄▄ ▀▀█▄\n █ ▓█▓▄ ▀▀█▓███▓▄ ██\n █ ▒▓▒▓ ▒█▓█▒▓ █▓█\n █ ░▒░▒█ █ ░▓▒▓░▒█ █▒▓█\n █ ░░░░▓ █ ░▒░▒░░▓ ▓░▒█\n █ ▒░▒░▒ █ ▒░░░▒░▒ ▒░░█\n █ ▓▒▓▒░ █ ▓░▒░▓▒░ ░▒░█\n █ █▓█▓▀ █ █▒▓▒█▓░ ░▓▒█\n █ ██▀ ▄▀█ █▓█▓██ ▒██\n █ █ ▄▀▄█ █████▀ ▓█\n ░ █ ░ █ ▄██▀▀ ▄▄█ █░\n ▒▄▄▄▒ ░▄▄▄▄▄▀▀ █ █\n █ ██▀ ▄▀ \n █ █▌▄▀ \n ░ █ █ \n ▒▄▄▄░ \n\n █████████\n███████████\n███████████\n███████████\n█████ █████\n█████ █████\n█████ █████\n█████ █████\n█████ █████\n███████████\n███████████\n ██████████\n ██████\n███████████\n██████████ ");
textPanesSrollPane.setViewportView(textPane);
panel.add(textPanesSrollPane, java.awt.BorderLayout.CENTER);
scrollPane.setViewportView(panel);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JTextPaneTestUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new JTextPaneTestUI().setVisible(true);
}
});
}
private javax.swing.JPanel panel;
private javax.swing.JScrollPane scrollPane;
private javax.swing.JTextPane textPane;
private javax.swing.JScrollPane textPanesSrollPane;
}
EDIT2: 有人建議我來呈現藝術形象,但我需要它是可編輯的,所以這不是我想的選擇。任何提示都表示讚賞!
我已經做了設置線路使用間距'StyleConstants.setLineSpacing ()',這導致了藝術的模糊,不清晰的顯示,並沒有刪除特定字體(Courier New)的所有尺寸(9和16之間)的行間距。也許我需要爲給定字體的不同大小添加不同的間距值?當我找到空閒時間並讓你知道結果時,我會嘗試添加跟蹤。 – phew
'TextAttribute.TRACKING'其實是非常有用擺脫上不同大小的「宋體」的occure字符之間的小縫隙,但使用它我仍然無法重現的字體看起來該死的NFO瀏覽器。我會做更多的測試,並用更多的信息更新問題。 – phew
呵呵,我剛纔注意到,從* .nfo文件複製藝術品時,在記事本++中有特殊字符顯示爲'[BEL]',這會在將正面尺寸從9改爲其他任何東西時污損藝術品。用空白替換它們後,可以顯示不同的大小,而不會污損。我將運行更多的測試,我想我現在可以使用你的'TRACKING'建議。 – phew