2011-09-16 5 views
-2

次のプログラムで指定されているように、ユニコード文字列をテーブルに表示しようとしています。スイングコンポーネントからユニコードを読み取ってスイングコンポーネントで表示するとエラーが発生する

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
/** 
* 
* @author dell 
*/ 
public class UnicodeExample extends javax.swing.JFrame { 

    /** Creates new form UnicodeExample */ 
    public UnicodeExample() { 
     initComponents(); 
     setTitle("Unicode Example"); 
     setSize(400, 400); 
     setLocationRelativeTo(null); 
    } 

    /** 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() { 

     jLabel1 = new javax.swing.JLabel(); 
     jTextField1 = new javax.swing.JTextField(); 
     jButton1 = new javax.swing.JButton(); 
     jLabel2 = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     getContentPane().setLayout(null); 

     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 
     jLabel1.setText("Enter :"); 
     getContentPane().add(jLabel1); 
     jLabel1.setBounds(24, 50, 70, 20); 

     jTextField1.setText("\\u00a5"); 
     getContentPane().add(jTextField1); 
     jTextField1.setBounds(110, 50, 220, 20); 

     jButton1.setText("Display Entered UniCode"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(jButton1); 
     jButton1.setBounds(120, 110, 160, 23); 
     getContentPane().add(jLabel2); 
     jLabel2.setBounds(120, 170, 150, 40); 

     pack(); 
    }// </editor-fold> 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     // TODO add your handling code here 
     String uniCode = jTextField1.getText(); 

     jLabel2.setText(uniCode); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new UnicodeExample().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JTextField jTextField1; 
    // End of variables declaration 
} 

ただし、Unicode文字は表示されません。これは、externelソースからの値をパラメータとして取得し、その値をSwingコントロールに設定した場合にのみ発生します。しかし、文字列をハードコードすると問題はありませんString unicode="\u00a5"

この問題の修正はありますか?

+2

あなたの問題を明確にするために、これらの自動生成されたコメントが必要でしたか? – Mohayemin

+0

OTNの[ユニコード表示が必要](https://forums.oracle.com/forums/thread.jspa?threadID=2284948)も参照してください。 –

+0

@Andrew:うわー!そこに私の答えの(ほぼ)完全一致があります! – Mohayemin

答えて

1

この場合、\u00a5は単一のユニコード文字とみなされるため、ハードコーディングが機能します。

ただし、JTextFieldから取得する場合は、ハードコードの場合は"\\u00a5"に相当するSTRING "\u00a5"が表示されます。

、より明確にする

char c = '\u00a5';

System.out.println(c);

編集しようとする:

あなただけの入力ボックスにユニコード表現を挿入した場合、この小さなコードを助けるかもしれない:

String uniCode = jTextField1.getText(); 

uniCode = uniCode.substring(2);   
char c = (char) Integer.parseInt(uniCode, 16);     

jLabel2.setText(c + ""); 

actionPerformedメソッドでこれを行います。

関連する問題