JTextPane
에 ANSI art을 표시하는 데 문제가 있습니다.Java - JTextPane에서 ANSI 아트를 올바르게 표시하는 방법
나는 생각 단순히 고정 폭 또는 고정 폭 글꼴을 chosing과 SimpleAttributeSet
를 통해 JTextPane
의 StyledDocument
의 라인 간격을 제거하는 것은 제대로 some different pieces of ANSI art를 표시하기에 충분하지만, 다른 글꼴과 설정을 시도한 후 나는 그것이이어야한다 깨달았다 것 그 이상.
내 the piece of digital art이 올바르게 표시되는지 확인하기 위해 DAMN NFO Viewer을 사용하여 JTextPane
을 비교했습니다.
artTextPane.setFont(new java.awt.Font("Courier New", 0, 8))
를 통해 (해당 설정 기본적으로
택배 새로운 8에 따라)를 사용하는 것과 동일한 글꼴 빌어 먹을에
JTextPane
글꼴을 설정합니다. 그러나
StyledDocument.setParagraphAttributes(int, int, AttributeSet, boolean)
을 통해 줄 간격 설정을 적용하더라도 내
JTextPane
에 아트가 올바르게 표시되지 않습니다.
빌어 먹을 NFO 뷰어 (택배 새로운, 8) :
내 JTextPane
(택배 새로운 8) :
다음은 차이를 보여 두 스크린 샷입니다
정말 이상한 것은 내가있을 때입니다. 내 JTextPane
의 font-size를 9로 설정하면 정렬이 정확하지만 약간 언뜻 보입니다.
내 JTextPane
(택배 새로운 9) : 또한
예술 작품의 g 형성 문자로 확대하면이 날카롭지 보이게 오른쪽 파란 화소를 도시 메모장에 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
나 그것을 사용할 수 있습니다 생각하게 파생 버전은 Courier New이고 설정은 "FontData"=hex:91,00,03,01
입니다. 그러나 Java에서 그 파생어를 재현하는 방법을 모릅니다.
누구나 내가 잘못하고있는 내용을 JTextPane
에 텍스트 파일을 표시하려고 시도하고 있다고 말할 수 있습니까? DAMN NFO 뷰어?
편집 : 추가 된 나는 현재 노력하고, 함께 일하고 몇 가지 테스트/예제 코드 글꼴합니다 (ANSI 아트를 훼손하지 않는 방식으로) "제대로"표시하려면 . NetBeans IDE의 내장 GUI 빌더 "Mantisse"를 사용하여이 테스트 GUI를 만들었으므로 완벽한 예제는 아니지만 DAMN NFO 뷰어의 스크린 샷과의 차이점을 분명히 보여 주어야합니다.
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'은 "Courier New"의 크기가 다른 문자들 사이의 작은 간격을 없애기 위해 실제로 유용합니다. 그러나 그것을 사용하여 여전히 DAMN NFO Viewer에서 글꼴 모양을 재현 할 수 없었습니다. 더 많은 테스트를하고 더 많은 정보로 질문을 업데이트 할 것입니다. – phew
아, 나는 방금 * .nfo 파일에서 아트를 복사 할 때 메모장 ++에 '[BEL]'로 표시된 특수 문자가 있음을 알아 차렸습니다. 앞면 크기를 9에서 다른 것으로 변경하면 아트가 손상됩니다. 이들을 공백으로 바꾸면 훼손되지 않고 크기를 다르게 표시 할 수 있습니다. 나는 더 많은 테스트를 할 것이고, 나는 당신의 제안을 '추적 (TRACKING)'과 함께 사용하여 지금 일할 수있을 것이라고 생각한다. – phew