2012-12-11 36 views
2

可能重複:
how to implement UTF-8 format in Swing application?對Java Swing的UTF-8支持問題?

在Swing應用程序我有發送按鈕,一個文本區域和文本字段。

如果我按下發送鍵,我需要將文本從文本字段發送到文本區域

它在英語而不是在當地語言工作正常...

package package1; 

import java.awt.*; 
import java.awt.event.*; 
import java.io.UnsupportedEncodingException; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.border.Border; 

class AEvent extends JFrame implements ActionListener{ 

    private static final long serialVersionUID = 1L; 
    JTextField tf; 
    JTextArea area ; 
    Border border; 

    AEvent(){ 

     area = new JTextArea(200,200); 
     area.setBounds(60,200,300,200); 

     border = BorderFactory.createLineBorder(Color.BLACK); 
     area.setBorder(border); 

     tf=new JTextField(); 
     tf.setBounds(60,70,150,20); 

     Button b=new Button("click me"); 
     b.setBounds(100,120,80,30); 

     b.addActionListener(this); 

     add(b); 
     add(tf); 
     add(area); 

     addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent we){ 
       System.exit(0); 
      } 
     }); 

     setSize(600,600); 
     setLayout(null); 
     setVisible(true); 

    } 

    public void actionPerformed(ActionEvent e){ 
     String s = null; 
     try { 
      s = new String(tf.getText().getBytes(), "UTF-8"); 
     } catch (UnsupportedEncodingException e1) { 
      e1.printStackTrace(); 
     } 
     area.setText(s); 
    } 

    public static void main(String args[]){ 
     new AEvent(); 

    } 
} 

請給一些想法或一些代碼,這將幫助我解決這個問題..

+0

本地語言中行的例子是什麼?嘗試解決'JTextAre.setFont()' –

+0

這應該工作。我也會懷疑一些字體問題,正如@NikolayKuznetsov所示。 –

+0

@UwePlonus:這*是一個確切的副本。他甚至複製了無用的重複點。 –

回答

-1

我試圖做你的目標與本地語言,它爲我工作得很好。您能否指定您正在考慮使用哪種本地語言以及您在使用哪種IDE?

+3

這是更多評論;) – MadProgrammer

+0

這是更多的評論;)[2] –

1

如果平臺默認編碼不是utf-8,則會中斷。 tf.getText().getBytes()爲您提供平臺默認編碼中的字節。如果字節的實際編碼不是utf-8,則new String(tf.getText().getBytes(), "UTF-8")將創建損壞的字符串。

嘗試

public void actionPerformed(ActionEvent e){ 
    area.setText(tf.getText()); 
} 
+0

我用area.setText(tf.getText()); 。但不起作用..它顯示了許多方框在文本框和????????在textarea。 –

+0

如果您在調試器中查看'tf.getText()'的結果,字符串是否可以正常顯示,您只需要獲取'????????'? –

0

爲什麼呢?

String s = null; 
try { 
    s = new String(tf.getText().getBytes(), "UTF-8"); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 
area.setText(s); 

爲什麼不乾脆:

area.setText(tf.getText()); 
+0

我用area.setText(tf.getText()); 。 bue不起作用.. –

1

好了,如果你還是不相信菲利普的回答,這裏是這表明了很好的答案完全運行的代碼。我試着用重音字符,它工作得很好。如果中斷,請說明如何。

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

class AEvent implements ActionListener { 

    private JTextField tf; 
    private JTextArea area; 
    private JFrame frame; 

    protected void initUI() { 
     frame = new JFrame(); 
     frame.setLayout(new GridBagLayout()); 
     area = new JTextArea(30, 80); 
     area.setEditable(false); 
     area.setFocusable(false); 
     tf = new JTextField(); 
     JButton b = new JButton("click me"); 
     b.addActionListener(this); 

     JScrollPane scrollPane = new JScrollPane(area); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     frame.add(scrollPane, gbc); 
     gbc = new GridBagConstraints(); 
     gbc.weightx = 1.0; 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     frame.add(tf, gbc); 
     gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(5, 5, 5, 5); 
     frame.add(b, gbc); 
     frame.getRootPane().setDefaultButton(b); 
     frame.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent we) { 
       System.exit(0); 
      } 
     }); 
     frame.pack(); 
     frame.setVisible(true); 
     tf.requestFocusInWindow(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     area.append(tf.getText() + "\n"); 
     tf.setText(""); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new AEvent().initUI(); 
      } 
     }); 
    } 
}